From a3e3291d9c0fb3579d87cfa2a8dcfaee87b49d30 Mon Sep 17 00:00:00 2001 From: Cody Henthorne Date: Thu, 13 Nov 2025 16:02:40 -0500 Subject: [PATCH] Fix websocket reconnect race due to async IMO termination. --- .../dependencies/NetworkDependenciesModule.kt | 2 +- .../securesms/messages/IncomingMessageObserver.kt | 12 ++++-------- 2 files changed, 5 insertions(+), 9 deletions(-) diff --git a/app/src/main/java/org/thoughtcrime/securesms/dependencies/NetworkDependenciesModule.kt b/app/src/main/java/org/thoughtcrime/securesms/dependencies/NetworkDependenciesModule.kt index abfa7fe5d6..a3a1bd236d 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/dependencies/NetworkDependenciesModule.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/dependencies/NetworkDependenciesModule.kt @@ -252,7 +252,7 @@ class NetworkDependenciesModule( fun closeConnections() { Log.i(TAG, "Closing connections.") - incomingMessageObserver.terminateAsync() + incomingMessageObserver.terminate() if (_signalServiceMessageSender.isInitialized()) { signalServiceMessageSender.cancelInFlightRequests() } diff --git a/app/src/main/java/org/thoughtcrime/securesms/messages/IncomingMessageObserver.kt b/app/src/main/java/org/thoughtcrime/securesms/messages/IncomingMessageObserver.kt index e9dc78a62f..63d47ac3d7 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/messages/IncomingMessageObserver.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/messages/IncomingMessageObserver.kt @@ -265,17 +265,13 @@ class IncomingMessageObserver( } } - fun terminateAsync() { - Log.w(TAG, "Termination Enqueued! ${this.hashCode()}", Throwable()) + fun terminate() { + Log.w(TAG, "Termination! ${this.hashCode()}", Throwable()) INSTANCE_COUNT.decrementAndGet() networkConnectionListener.unregister() webSocketStateDisposable.dispose() - SignalExecutors.BOUNDED.execute { - Log.w(TAG, "Beginning termination. ${this.hashCode()}") - terminated = true - Log.w(TAG, "Disconnecting auth socket as part of termination") - authWebSocket.disconnect() - } + terminated = true + authWebSocket.disconnect() } @VisibleForTesting