X-Git-Url: https://git.nmode.ca/signal-cli/blobdiff_plain/4a1af0786c938f887a109a17dcc879da21704a8b..53b84bad0280694a19e47d6f76620f8a140fdd15:/src/main/java/org/asamk/signal/commands/DaemonCommand.java diff --git a/src/main/java/org/asamk/signal/commands/DaemonCommand.java b/src/main/java/org/asamk/signal/commands/DaemonCommand.java index 605182ae..726cf268 100644 --- a/src/main/java/org/asamk/signal/commands/DaemonCommand.java +++ b/src/main/java/org/asamk/signal/commands/DaemonCommand.java @@ -132,6 +132,12 @@ public class DaemonCommand implements MultiLocalCommand, LocalCommand { runDbusSingleAccount(m, false, receiveMode != ReceiveMode.ON_START); } + m.addClosedListener(() -> { + synchronized (this) { + notifyAll(); + } + }); + synchronized (this) { try { wait(); @@ -230,7 +236,6 @@ public class DaemonCommand implements MultiLocalCommand, LocalCommand { } private void runSocket(final ServerSocketChannel serverChannel, Consumer socketHandler) { - final var mainThread = Thread.currentThread(); new Thread(() -> { while (true) { final SocketChannel channel; @@ -241,7 +246,9 @@ public class DaemonCommand implements MultiLocalCommand, LocalCommand { logger.info("Accepted new client: " + clientString); } catch (IOException e) { logger.error("Failed to accept new socket connection", e); - mainThread.notifyAll(); + synchronized (this) { + notifyAll(); + } break; } new Thread(() -> { @@ -292,6 +299,17 @@ public class DaemonCommand implements MultiLocalCommand, LocalCommand { } } }); + c.addOnManagerRemovedHandler(m -> { + final var path = DbusConfig.getObjectPath(m.getSelfNumber()); + try { + final var object = connection.getExportedObject(null, path); + if (object instanceof DbusSignalImpl dbusSignal) { + dbusSignal.close(); + } + } catch (DBusException ignored) { + } + connection.unExportObject(path); + }); final var initThreads = c.getAccountNumbers() .stream()