From 68f567b0b7b4cb52af8212c2dfa10883b9158bc7 Mon Sep 17 00:00:00 2001 From: Cody Henthorne Date: Wed, 23 Apr 2025 14:30:18 -0400 Subject: [PATCH] Fix a few random crashes when using libsignal-net. --- .../org/thoughtcrime/securesms/ApplicationContext.java | 3 ++- .../internal/websocket/LibSignalChatConnection.kt | 7 +++++-- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/org/thoughtcrime/securesms/ApplicationContext.java b/app/src/main/java/org/thoughtcrime/securesms/ApplicationContext.java index e37bde1370..24c25b96ec 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/ApplicationContext.java +++ b/app/src/main/java/org/thoughtcrime/securesms/ApplicationContext.java @@ -38,6 +38,7 @@ import org.signal.core.util.logging.Log; import org.signal.core.util.logging.Scrubber; import org.signal.core.util.tracing.Tracer; import org.signal.glide.SignalGlideCodecs; +import org.signal.libsignal.net.ChatServiceException; import org.signal.libsignal.protocol.logging.SignalProtocolLoggerProvider; import org.signal.ringrtc.CallManager; import org.thoughtcrime.securesms.apkupdate.ApkUpdateRefreshListener; @@ -363,7 +364,7 @@ public class ApplicationContext extends Application implements AppForegroundObse e = e.getCause(); } - if (wasWrapped && (e instanceof SocketException || e instanceof InterruptedException || e instanceof InterruptedIOException)) { + if (wasWrapped && (e instanceof SocketException || e instanceof InterruptedException || e instanceof InterruptedIOException || e instanceof ChatServiceException)) { return; } diff --git a/libsignal-service/src/main/java/org/whispersystems/signalservice/internal/websocket/LibSignalChatConnection.kt b/libsignal-service/src/main/java/org/whispersystems/signalservice/internal/websocket/LibSignalChatConnection.kt index 64d1bdce36..2fc5266d8c 100644 --- a/libsignal-service/src/main/java/org/whispersystems/signalservice/internal/websocket/LibSignalChatConnection.kt +++ b/libsignal-service/src/main/java/org/whispersystems/signalservice/internal/websocket/LibSignalChatConnection.kt @@ -498,6 +498,7 @@ class LibSignalChatConnection( } } + @Throws(IOException::class) override fun sendResponse(response: WebSocketResponseMessage) { if (response.status == 200 && response.message.equals("OK")) { ackSenderForInternalPseudoId[response.id]?.send() ?: Log.w(TAG, "$name [sendResponse] Silently dropped response without available ackSend {id: ${response.id}}") @@ -554,8 +555,10 @@ class LibSignalChatConnection( else -> disconnectReason } - for (pendingResponse in pendingResponses) { - pendingResponse.onError(downstreamThrowable) + synchronized(pendingResponses) { + for (pendingResponse in pendingResponses) { + pendingResponse.onError(downstreamThrowable) + } } } chatConnection = null