Leave all servers in parallel on shutdown
Some checks are pending
test / test (push) Waiting to run

Quitting tells every server goodbye at once, so leaving takes as long as
the slowest server rather than all of them together. Desktop and Android
both go through ServerSession.shutdownAll.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
2026-10-02 06:55:15 +00:00
parent 5fd2a612b9
commit 2351b174f8
4 changed files with 28 additions and 5 deletions

View File

@@ -208,6 +208,27 @@ public final class ServerSession {
if (isBusy()) conn.disconnectBlocking("Leaving");
}
/**
* {@link #shutdown()}s every session at once, so leaving takes as long as the slowest
* server rather than all of them together: a frontend may have little time left.
*/
public static void shutdownAll(List<ServerSession> sessions) {
List<Thread> leaving = new ArrayList<>();
for (ServerSession s : sessions) {
Thread t = new Thread(s::shutdown, "ts3-leave");
t.start();
leaving.add(t);
}
for (Thread t : leaving) {
try {
t.join();
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
return;
}
}
}
/** Releases the background resources of a session that is being thrown away. */
public void dispose() {
conn.getIcons().shutdown();

View File

@@ -153,7 +153,7 @@ public final class Sessions {
/** Leaves every server, waiting until each has been told. */
public void shutdown() {
for (ServerSession s : new ArrayList<>(sessions)) s.shutdown();
ServerSession.shutdownAll(new ArrayList<>(sessions));
handover.shutdown();
}
}