From: AsamK Date: Sat, 6 Nov 2021 20:59:11 +0000 (+0100) Subject: Implement close for DbusManagerImpl X-Git-Tag: v0.10.0~85 X-Git-Url: https://git.nmode.ca/signal-cli/commitdiff_plain/510dc89e925fa0fa80f528d140215171dceb9fcb Implement close for DbusManagerImpl --- diff --git a/src/main/java/org/asamk/signal/App.java b/src/main/java/org/asamk/signal/App.java index 720a5849..9f216daa 100644 --- a/src/main/java/org/asamk/signal/App.java +++ b/src/main/java/org/asamk/signal/App.java @@ -344,11 +344,11 @@ public class App { Command command, Signal ts, DBusConnection dBusConn, OutputWriter outputWriter ) throws CommandException { if (command instanceof LocalCommand localCommand) { - try { - localCommand.handleCommand(ns, new DbusManagerImpl(ts, dBusConn), outputWriter); + try (final var m = new DbusManagerImpl(ts, dBusConn)) { + localCommand.handleCommand(ns, m, outputWriter); } catch (UnsupportedOperationException e) { throw new UserErrorException("Command is not yet implemented via dbus", e); - } catch (DBusExecutionException e) { + } catch (IOException | DBusExecutionException e) { throw new UnexpectedErrorException(e.getMessage(), e); } } else { 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();