X-Git-Url: https://git.nmode.ca/signal-cli/blobdiff_plain/fa9401d1868331e5d8dad898d21461dc9d7fe4e1..510dc89e925fa0fa80f528d140215171dceb9fcb:/src/main/java/org/asamk/signal/dbus/DbusManagerImpl.java diff --git a/src/main/java/org/asamk/signal/dbus/DbusManagerImpl.java b/src/main/java/org/asamk/signal/dbus/DbusManagerImpl.java index 0d5ed98e..7eb7c4dc 100644 --- a/src/main/java/org/asamk/signal/dbus/DbusManagerImpl.java +++ b/src/main/java/org/asamk/signal/dbus/DbusManagerImpl.java @@ -437,13 +437,7 @@ public class DbusManagerImpl implements Manager { synchronized (messageHandlers) { messageHandlers.remove(handler); if (messageHandlers.size() == 0) { - try { - connection.removeSigHandler(Signal.MessageReceivedV2.class, signal, this.dbusMsgHandler); - connection.removeSigHandler(Signal.ReceiptReceivedV2.class, signal, this.dbusRcptHandler); - connection.removeSigHandler(Signal.SyncMessageReceivedV2.class, signal, this.dbusSyncHandler); - } catch (DBusException e) { - e.printStackTrace(); - } + uninstallMessageHandlers(); } } } @@ -583,6 +577,13 @@ public class DbusManagerImpl implements Manager { @Override public void close() throws IOException { + synchronized (this) { + this.notify(); + } + synchronized (messageHandlers) { + messageHandlers.clear(); + uninstallMessageHandlers(); + } } private SendMessageResults handleMessage( @@ -757,6 +758,16 @@ public class DbusManagerImpl implements Manager { } } + private void uninstallMessageHandlers() { + try { + connection.removeSigHandler(Signal.MessageReceivedV2.class, signal, this.dbusMsgHandler); + connection.removeSigHandler(Signal.ReceiptReceivedV2.class, signal, this.dbusRcptHandler); + connection.removeSigHandler(Signal.SyncMessageReceivedV2.class, signal, this.dbusSyncHandler); + } catch (DBusException e) { + e.printStackTrace(); + } + } + private List getAttachments(final Map> extras) { if (!extras.containsKey("attachments")) { return List.of();