From 99ab91d2f5262c6f004211bd1e0eb37da2d6c256 Mon Sep 17 00:00:00 2001 From: evgeny Date: Wed, 28 Oct 2026 23:31:44 +0100 Subject: [PATCH] Clarify router cleanup as a native audio teardown prerequisite --- .../app/src/main/java/com/utun/chat/data/CallAudioEngine.kt | 5 +++-- tools/chatgui-android/doc/ARCHITECTURE.md | 2 +- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/tools/chatgui-android/app/src/main/java/com/utun/chat/data/CallAudioEngine.kt b/tools/chatgui-android/app/src/main/java/com/utun/chat/data/CallAudioEngine.kt index 7f0334f4..0c95c5aa 100644 --- a/tools/chatgui-android/app/src/main/java/com/utun/chat/data/CallAudioEngine.kt +++ b/tools/chatgui-android/app/src/main/java/com/utun/chat/data/CallAudioEngine.kt @@ -126,7 +126,8 @@ class CallAudioEngine { System.nanoTime() / 1000 - sample.atUs in 0..500_000) sample.latency else CallOutputLatency() } - /** Позднее создание Telecom Connection: сначала снимаем собственную заявку на audio mode. */ + /** Поздняя Telecom Connection: снять собственные mode/глобальный маршрут, затем передать владение. + * Отказ передаётся через onFailure; stop сохраняет неподтверждённые ресурсы для повторной очистки. */ fun bindTelecom(connection: UtunConnection) { if (!active || router.telecom === connection) return try { @@ -323,7 +324,7 @@ class CallAudioEngine { /** Main: отменить работу, разблокировать read и подтвердить join/release каждой независимой части. * Join ограничен 250 мс на worker; живые потоки и устройства остаются до следующей попытки. - * При неполной очистке бросает ошибку владельцу; native останавливается лишь после устройств. */ + * При неполной очистке бросает ошибку владельцу; native ждёт устройства, router, listener и mode. */ fun stop() { check(Looper.myLooper() == Looper.getMainLooper()) { LogManager.addLog("ERROR", "CallAudio", "stop outside main id=$callId") diff --git a/tools/chatgui-android/doc/ARCHITECTURE.md b/tools/chatgui-android/doc/ARCHITECTURE.md index 80c96557..0ca5fb15 100644 --- a/tools/chatgui-android/doc/ARCHITECTURE.md +++ b/tools/chatgui-android/doc/ARCHITECTURE.md @@ -418,7 +418,7 @@ Audio stop снимает active и callbacks, пытается разблоки worker до 250 мс за попытку; playback также ждёт свой reporter. Живые потоки сохраняются, устройства освобождаются после завершения обоих workers. Ошибки release оставляют AudioRecord/CallAudioOutput у движка, включая частичный запуск и отказ после эффекта. -Удаление communication listener и восстановление собственного AudioManager mode/speaker +Остановка router, удаление communication listener и восстановление собственного AudioManager mode/speaker повторяются независимо; после передачи режима в Telecom fallback его не восстанавливает. Незавершённая очистка бросает ошибку сервису и запрещает новый start. Native audio stop вызывается после подтверждения этих операций, его отказ также допускает повтор.