diff --git a/example/pom.xml b/example/pom.xml index acbe427..99a716e 100644 --- a/example/pom.xml +++ b/example/pom.xml @@ -26,7 +26,7 @@ it.tdlight tdlight-java-bom - 2.7.10.0 + 2.7.10.1 pom import diff --git a/src/main/java/it/tdlight/client/SimpleTelegramClient.java b/src/main/java/it/tdlight/client/SimpleTelegramClient.java index 1e220b2..0148672 100644 --- a/src/main/java/it/tdlight/client/SimpleTelegramClient.java +++ b/src/main/java/it/tdlight/client/SimpleTelegramClient.java @@ -205,18 +205,6 @@ public final class SimpleTelegramClient implements Authenticable { this.authenticationData = authenticationData; createDirectories(); client.initialize(this::handleUpdate, this::handleUpdateException, this::handleDefaultException); - - // Handle unexpected shutdown - Runtime.getRuntime().addShutdownHook(new Thread(() -> { - try { - // Send close function - this.client.send(new TdApi.Close(), ok -> {}, ex -> {}); - // Wait until the client has been closed successfully - this.waitForExit(); - } catch (Throwable ignored) { - // Ignore errors since we are shutting down everything - } - })); } private void createDirectories() { diff --git a/src/main/java/it/tdlight/common/internal/InternalClientManager.java b/src/main/java/it/tdlight/common/internal/InternalClientManager.java index d9351b5..6b1aa75 100644 --- a/src/main/java/it/tdlight/common/internal/InternalClientManager.java +++ b/src/main/java/it/tdlight/common/internal/InternalClientManager.java @@ -60,15 +60,7 @@ public final class InternalClientManager implements AutoCloseable { } return val; }); - if (clientManager.startIfNeeded()) { - Runtime.getRuntime().addShutdownHook(new Thread(() -> { - try { - clientManager.onJVMShutdown(); - } catch (InterruptedException ex) { - logger.error("Failed to close", ex); - } - })); - } + clientManager.startIfNeeded(); return clientManager; } @@ -159,10 +151,6 @@ public final class InternalClientManager implements AutoCloseable { } } - private void onJVMShutdown() throws InterruptedException { - responseReceiver.onJVMShutdown(); - } - private static final class DroppedEvent { private final long id; diff --git a/src/main/java/it/tdlight/common/internal/ResponseReceiver.java b/src/main/java/it/tdlight/common/internal/ResponseReceiver.java index eb3f339..b535719 100644 --- a/src/main/java/it/tdlight/common/internal/ResponseReceiver.java +++ b/src/main/java/it/tdlight/common/internal/ResponseReceiver.java @@ -21,7 +21,6 @@ import java.util.concurrent.atomic.AtomicBoolean; abstract class ResponseReceiver extends Thread implements AutoCloseable { - private static final String FLAG_PAUSE_SHUTDOWN_UNTIL_ALL_CLOSED = "it.tdlight.pauseShutdownUntilAllClosed"; private static final String FLAG_USE_OPTIMIZED_DISPATCHER = "tdlight.dispatcher.use_optimized_dispatcher"; private static final boolean USE_OPTIMIZED_DISPATCHER = Boolean.parseBoolean(System.getProperty(FLAG_USE_OPTIMIZED_DISPATCHER, "true")); @@ -36,7 +35,6 @@ abstract class ResponseReceiver extends Thread implements AutoCloseable { private final AtomicBoolean startCalled = new AtomicBoolean(); private final AtomicBoolean closeCalled = new AtomicBoolean(); - private final AtomicBoolean jvmShutdown = new AtomicBoolean(); private final EventsHandler eventsHandler; private final int[] clientIds = new int[MAX_EVENTS]; @@ -56,7 +54,7 @@ abstract class ResponseReceiver extends Thread implements AutoCloseable { public ResponseReceiver(EventsHandler eventsHandler) { super("TDLib thread"); this.eventsHandler = eventsHandler; - this.setDaemon(true); + this.setDaemon(false); } /** @@ -82,7 +80,6 @@ abstract class ResponseReceiver extends Thread implements AutoCloseable { boolean interrupted; while ( !(interrupted = Thread.interrupted()) - && !jvmShutdown.get() && (!closeCalled.get() || !registeredClients.isEmpty()) ) { // Timeout is expressed in seconds @@ -224,11 +221,9 @@ abstract class ResponseReceiver extends Thread implements AutoCloseable { } } - if (interrupted) { - if (!jvmShutdown.get()) { - for (Integer clientId : this.registeredClients) { - eventsHandler.handleClientEvents(clientId, true, clientEventIds, clientEvents, 0, 0); - } + if (interrupted || closeCalled.get()) { + for (Integer clientId : this.registeredClients) { + eventsHandler.handleClientEvents(clientId, true, clientEventIds, clientEvents, 0, 0); } } } finally { @@ -287,14 +282,4 @@ abstract class ResponseReceiver extends Thread implements AutoCloseable { throw new IllegalStateException("Start not called"); } } - - public void onJVMShutdown() throws InterruptedException { - if (startCalled.get()) { - if (this.jvmShutdown.compareAndSet(false, true)) { - if (Boolean.parseBoolean(System.getProperty(FLAG_PAUSE_SHUTDOWN_UNTIL_ALL_CLOSED, "true"))) { - this.closeWait.await(); - } - } - } - } }