]> nmode's Git Repositories - signal-cli/commitdiff
Implement close for DbusManagerImpl
authorAsamK <asamk@gmx.de>
Sat, 6 Nov 2021 20:59:11 +0000 (21:59 +0100)
committerAsamK <asamk@gmx.de>
Sat, 6 Nov 2021 20:59:11 +0000 (21:59 +0100)
src/main/java/org/asamk/signal/App.java
src/main/java/org/asamk/signal/dbus/DbusManagerImpl.java

index 720a58499e9c12accc64ee329781704b3c865749..9f216daad012b40b3dc5a6626191ecd6c7ae6baf 100644 (file)
@@ -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 {
index 0d5ed98e5a662be69821dc4090993d9a457ecd6f..7eb7c4dcbbef9c9e9e6d5208cc4c7f19bf537c79 100644 (file)
@@ -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<MessageEnvelope.Data.Attachment> getAttachments(final Map<String, Variant<?>> extras) {
         if (!extras.containsKey("attachments")) {
             return List.of();