From c0c6782a17e4927f3d0d286752c117eeea9450d9 Mon Sep 17 00:00:00 2001 From: Peter Steinberger Date: Tue, 30 Dec 2025 04:42:02 +0100 Subject: [PATCH] fix(android): stabilize BridgeSession shutdown --- .../steipete/clawdis/node/bridge/BridgeSession.kt | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/apps/android/app/src/main/java/com/steipete/clawdis/node/bridge/BridgeSession.kt b/apps/android/app/src/main/java/com/steipete/clawdis/node/bridge/BridgeSession.kt index 5f01959ec..83e2cb744 100644 --- a/apps/android/app/src/main/java/com/steipete/clawdis/node/bridge/BridgeSession.kt +++ b/apps/android/app/src/main/java/com/steipete/clawdis/node/bridge/BridgeSession.kt @@ -77,6 +77,8 @@ class BridgeSession( fun disconnect() { desired = null + // Unblock connectOnce() read loop. Coroutine cancellation alone won't interrupt BufferedReader.readLine(). + currentConnection?.closeQuietly() scope.launch(Dispatchers.IO) { job?.cancelAndJoin() job = null @@ -218,10 +220,13 @@ class BridgeSession( val rawCanvasUrl = first["canvasHostUrl"].asStringOrNull()?.trim()?.ifEmpty { null } canvasHostUrl = normalizeCanvasHostUrl(rawCanvasUrl, endpoint) if (BuildConfig.DEBUG) { - android.util.Log.d( - "ClawdisBridge", - "canvasHostUrl resolved=${canvasHostUrl ?: "none"} (raw=${rawCanvasUrl ?: "none"})", - ) + // Local JVM unit tests use android.jar stubs; Log.d can throw "not mocked". + runCatching { + android.util.Log.d( + "ClawdisBridge", + "canvasHostUrl resolved=${canvasHostUrl ?: "none"} (raw=${rawCanvasUrl ?: "none"})", + ) + } } onConnected(name, conn.remoteAddress) }