X-Git-Url: https://git.nmode.ca/signal-cli/blobdiff_plain/b7005884fdcfa8d95f54e557ddbf2fe4201962f8..c9928043b2d23ae89de376eb1b567c7f66e461fe:/lib/src/main/java/org/asamk/signal/manager/MultiAccountManagerImpl.java diff --git a/lib/src/main/java/org/asamk/signal/manager/MultiAccountManagerImpl.java b/lib/src/main/java/org/asamk/signal/manager/MultiAccountManagerImpl.java index 26f8b961..74c4c20a 100644 --- a/lib/src/main/java/org/asamk/signal/manager/MultiAccountManagerImpl.java +++ b/lib/src/main/java/org/asamk/signal/manager/MultiAccountManagerImpl.java @@ -7,6 +7,7 @@ import org.slf4j.LoggerFactory; import java.io.File; import java.io.IOException; import java.net.URI; +import java.util.ArrayList; import java.util.Collection; import java.util.HashMap; import java.util.HashSet; @@ -36,6 +37,7 @@ public class MultiAccountManagerImpl implements MultiAccountManager { final String userAgent ) { this.managers.addAll(managers); + managers.forEach(m -> m.addClosedListener(() -> this.removeManager(m))); this.dataPath = dataPath; this.serviceEnvironment = serviceEnvironment; this.userAgent = userAgent; @@ -54,6 +56,7 @@ public class MultiAccountManagerImpl implements MultiAccountManager { return; } managers.add(m); + m.addClosedListener(() -> this.removeManager(m)); } synchronized (onManagerAddedHandlers) { for (final var handler : onManagerAddedHandlers) { @@ -69,6 +72,19 @@ public class MultiAccountManagerImpl implements MultiAccountManager { } } + void removeManager(final Manager m) { + synchronized (managers) { + if (!managers.remove(m)) { + return; + } + } + synchronized (onManagerRemovedHandlers) { + for (final var handler : onManagerRemovedHandlers) { + handler.accept(m); + } + } + } + @Override public void addOnManagerRemovedHandler(final Consumer handler) { synchronized (onManagerRemovedHandlers) { @@ -109,7 +125,7 @@ public class MultiAccountManagerImpl implements MultiAccountManager { @Override public void close() { synchronized (managers) { - for (var m : managers) { + for (var m : new ArrayList<>(managers)) { try { m.close(); } catch (IOException e) {