From: AsamK Date: Mon, 23 Aug 2021 12:39:40 +0000 (+0200) Subject: Handle queued actions also when thread is interrupted X-Git-Tag: v0.9.0~51 X-Git-Url: https://git.nmode.ca/signal-cli/commitdiff_plain/6dd1a216062baa6503d158dcaac5ee1a2cd1b43e?ds=sidebyside Handle queued actions also when thread is interrupted --- diff --git a/lib/src/main/java/org/asamk/signal/manager/Manager.java b/lib/src/main/java/org/asamk/signal/manager/Manager.java index cc57e061..80c5fbbb 100644 --- a/lib/src/main/java/org/asamk/signal/manager/Manager.java +++ b/lib/src/main/java/org/asamk/signal/manager/Manager.java @@ -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 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 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 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( diff --git a/src/main/java/org/asamk/signal/commands/DaemonCommand.java b/src/main/java/org/asamk/signal/commands/DaemonCommand.java index 49489293..0591486c 100644 --- a/src/main/java/org/asamk/signal/commands/DaemonCommand.java +++ b/src/main/java/org/asamk/signal/commands/DaemonCommand.java @@ -134,8 +134,6 @@ public class DaemonCommand implements MultiLocalCommand { break; } catch (IOException e) { logger.warn("Receiving messages failed, retrying", e); - } catch (InterruptedException ignored) { - break; } } }); diff --git a/src/main/java/org/asamk/signal/commands/JsonRpcDispatcherCommand.java b/src/main/java/org/asamk/signal/commands/JsonRpcDispatcherCommand.java index 6b5361e5..16d0cf71 100644 --- a/src/main/java/org/asamk/signal/commands/JsonRpcDispatcherCommand.java +++ b/src/main/java/org/asamk/signal/commands/JsonRpcDispatcherCommand.java @@ -168,8 +168,6 @@ public class JsonRpcDispatcherCommand implements LocalCommand { break; } catch (IOException e) { logger.warn("Receiving messages failed, retrying", e); - } catch (InterruptedException e) { - break; } } }); diff --git a/src/main/java/org/asamk/signal/commands/ReceiveCommand.java b/src/main/java/org/asamk/signal/commands/ReceiveCommand.java index 82bd5d8f..f248d662 100644 --- a/src/main/java/org/asamk/signal/commands/ReceiveCommand.java +++ b/src/main/java/org/asamk/signal/commands/ReceiveCommand.java @@ -158,7 +158,6 @@ public class ReceiveCommand implements ExtendedDbusCommand, LocalCommand { handler); } catch (IOException e) { throw new IOErrorException("Error while receiving messages: " + e.getMessage()); - } catch (InterruptedException ignored) { } } }