diff --git a/src/main/java/org/xbill/DNS/NioClient.java b/src/main/java/org/xbill/DNS/NioClient.java index b197f416..076fd7d7 100644 --- a/src/main/java/org/xbill/DNS/NioClient.java +++ b/src/main/java/org/xbill/DNS/NioClient.java @@ -94,6 +94,7 @@ public static void close() { } private static void close(boolean fromHook) { + log.debug("Closing dnsjava NIO selector, fromHook={}", fromHook); run = false; Selector localSelector = selector; if (localSelector != null) { @@ -139,7 +140,14 @@ static void runSelector() { while (run) { try { - if (selector.select(timeout) == 0) { + int numSelects = selector.select(timeout); + if (Thread.currentThread().isInterrupted()) { + log.debug("Sector thread was interrupted, stopping"); + close(); + break; + } + + if (numSelects == 0) { runTasks(TIMEOUT_TASKS); } diff --git a/src/main/java/org/xbill/DNS/NioTcpClient.java b/src/main/java/org/xbill/DNS/NioTcpClient.java index 200a5331..50f9c131 100644 --- a/src/main/java/org/xbill/DNS/NioTcpClient.java +++ b/src/main/java/org/xbill/DNS/NioTcpClient.java @@ -66,11 +66,10 @@ private void checkTransactionTimeouts() { private void closeTcp() { registrationQueue.clear(); EOFException closing = new EOFException("Client is closing"); - channelMap.forEach( - (key, state) -> { - state.handleTransactionException(closing); - state.handleChannelException(closing); - }); + for (ChannelState state : channelMap.values()) { + state.handleTransactionException(closing); + state.handleChannelException(closing); + } channelMap.clear(); }