]> nmode's Git Repositories - signal-cli/blobdiff - lib/src/main/java/org/asamk/signal/manager/Manager.java
Handle queued actions also when thread is interrupted
[signal-cli] / lib / src / main / java / org / asamk / signal / manager / Manager.java
index cc57e0614b27451a0864e19e19b70cc8b66d8f51..80c5fbbb3a7758886e04d980f58ca7966f54dee3 100644 (file)
@@ -1790,16 +1790,7 @@ public class Manager implements Closeable {
                 queuedActions.addAll(actions);
             }
         }
-        for (var action : queuedActions) {
-            try {
-                action.execute(this);
-            } catch (Throwable e) {
-                if (e instanceof AssertionError && e.getCause() instanceof InterruptedException) {
-                    Thread.currentThread().interrupt();
-                }
-                logger.warn("Message action failed.", e);
-            }
-        }
+        handleQueuedActions(queuedActions);
     }
 
     private List<HandleAction> retryFailedReceivedMessage(
@@ -1843,7 +1834,7 @@ public class Manager implements Closeable {
             boolean returnOnTimeout,
             boolean ignoreAttachments,
             ReceiveMessageHandler handler
-    ) throws IOException, InterruptedException {
+    ) throws IOException {
         retryFailedReceivedMessages(handler, ignoreAttachments);
 
         Set<HandleAction> queuedActions = new HashSet<>();
@@ -1875,16 +1866,7 @@ public class Manager implements Closeable {
                     // Received indicator that server queue is empty
                     hasCaughtUpWithOldMessages = true;
 
-                    for (var action : queuedActions) {
-                        try {
-                            action.execute(this);
-                        } catch (Throwable e) {
-                            if (e instanceof AssertionError && e.getCause() instanceof InterruptedException) {
-                                Thread.currentThread().interrupt();
-                            }
-                            logger.warn("Message action failed.", e);
-                        }
-                    }
+                    handleQueuedActions(queuedActions);
                     queuedActions.clear();
 
                     // Continue to wait another timeout for new messages
@@ -1892,7 +1874,8 @@ public class Manager implements Closeable {
                 }
             } catch (AssertionError e) {
                 if (e.getCause() instanceof InterruptedException) {
-                    throw (InterruptedException) e.getCause();
+                    Thread.currentThread().interrupt();
+                    break;
                 } else {
                     throw e;
                 }
@@ -1970,6 +1953,20 @@ public class Manager implements Closeable {
                 }
             }
         }
+        handleQueuedActions(queuedActions);
+    }
+
+    private void handleQueuedActions(final Set<HandleAction> queuedActions) {
+        for (var action : queuedActions) {
+            try {
+                action.execute(this);
+            } catch (Throwable e) {
+                if (e instanceof AssertionError && e.getCause() instanceof InterruptedException) {
+                    Thread.currentThread().interrupt();
+                }
+                logger.warn("Message action failed.", e);
+            }
+        }
     }
 
     private boolean isMessageBlocked(