From 826055d08bc750facd88d29148dee6189d93e2dd Mon Sep 17 00:00:00 2001 From: evgeny Date: Wed, 28 Oct 2026 21:22:19 +0100 Subject: [PATCH] Keep failed video shutdown joins and rejected cleanup requests retryable --- .../src/main/java/com/utun/chat/data/CallVideoEngine.kt | 9 +++++++-- .../com/utun/chat/data/CallServiceLifecycleTest.kt | 1 + 2 files changed, 8 insertions(+), 2 deletions(-) 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 b61b6aa6..7816bc7f 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 @@ -70,6 +70,7 @@ class CallVideoEngine(private val context: Context, private val id: Long) { private var sessionSerial = 0L private val sessions = mutableMapOf Unit>>() @Volatile private var stopped = false + private var stopCleanupPosted = false // Main: RX join/native close и постановка финального camera cleanup подтверждены. private var encoders = emptyMap() private var caps = ByteArray(64) private var wanted = CallVideoSettings() @@ -580,9 +581,9 @@ class CallVideoEngine(private val context: Context, private val id: Long) { } fun stop() { - if (stopped) return + if (stopCleanupPosted) return stopped = true; player.stop(); CallVideoNative.close(id) - handler.post { + check(handler.post { observeOrientation(false) mutable.value = mutable.value.copy(transmitting = false, activeCodec = 0) closeCamera(); encoder?.close(); encoder = null; pendingFrames.clear() @@ -590,6 +591,10 @@ class CallVideoEngine(private val context: Context, private val id: Long) { if (camera == null && !opening) thread.quitSafely() else handler.postDelayed({ thread.quitSafely() }, 3000) LogManager.addLog("INFO", "call", "video workers stopped id=$id") + }) { + LogManager.addLog("ERROR", "call", "video stop cleanup rejected id=$id; stop remains retryable") + "Video cleanup worker rejected stop" } + stopCleanupPosted = true } } diff --git a/tools/chatgui-android/call-service-tests/src/test/kotlin/com/utun/chat/data/CallServiceLifecycleTest.kt b/tools/chatgui-android/call-service-tests/src/test/kotlin/com/utun/chat/data/CallServiceLifecycleTest.kt index d9d2279a..0460efe4 100644 --- a/tools/chatgui-android/call-service-tests/src/test/kotlin/com/utun/chat/data/CallServiceLifecycleTest.kt +++ b/tools/chatgui-android/call-service-tests/src/test/kotlin/com/utun/chat/data/CallServiceLifecycleTest.kt @@ -48,6 +48,7 @@ class CallServiceLifecycleTest { } @After fun release() { + NativeLib.failActivityRequest = false Handler.rejectImmediate = false; Handler.rejectDelayed = false AppLanguage.failText = false; NotificationCompat.failBuild = false; CallVideoEngine.failCreate = false power.failures = emptySet(); power.locks.forEach { it.failures = emptySet() }