diff --git a/tools/chatgui-android/app/src/main/java/com/utun/chat/data/CallService.kt b/tools/chatgui-android/app/src/main/java/com/utun/chat/data/CallService.kt index 305abdfc..0551f0b4 100644 --- a/tools/chatgui-android/app/src/main/java/com/utun/chat/data/CallService.kt +++ b/tools/chatgui-android/app/src/main/java/com/utun/chat/data/CallService.kt @@ -406,8 +406,8 @@ class CallService : Service() { audio.onFailure = null audio.router.onChanged = null video?.let { owned -> try { - owned.stop() - video = null + if (owned.stop()) video = null + else LogManager.addLog("DEBUG", "CallService", "video cleanup pending id=$id; service retains owner") } catch (e: Exception) { LogManager.addLog("ERROR", "CallService", "video stop failed id=$id; retained for retry: $e") } } diff --git a/tools/chatgui-android/app/src/main/java/com/utun/chat/data/CallVideoEngine.kt b/tools/chatgui-android/app/src/main/java/com/utun/chat/data/CallVideoEngine.kt index 18c4813a..7f1113e7 100644 --- a/tools/chatgui-android/app/src/main/java/com/utun/chat/data/CallVideoEngine.kt +++ b/tools/chatgui-android/app/src/main/java/com/utun/chat/data/CallVideoEngine.kt @@ -584,8 +584,8 @@ class CallVideoEngine(private val context: Context, private val id: Long) { /** Main: запретить producers, join RX и закрыть native port, затем передать camera cleanup worker. * Исключение до принятия cleanup не подтверждает stop; следующий вызов повторяет незавершённый этап. */ - fun stop() { - if (stopCleanupPosted) return + fun stop(): Boolean { + if (stopCleanupPosted) return true stopped = true; player.stop(); CallVideoNative.close(id) check(handler.post { observeOrientation(false) @@ -600,5 +600,6 @@ class CallVideoEngine(private val context: Context, private val id: Long) { "Video cleanup worker rejected stop" } stopCleanupPosted = true + return true } }