From de8768807fc7a3fcabc9762b033cf59e695cf14b Mon Sep 17 00:00:00 2001 From: Colvin Cowie <51863265+colvinco@users.noreply.github.com> Date: Mon, 27 Feb 2023 14:41:01 +0000 Subject: ZOOKEEPER-4296: Add null checks to ClientCnxnSocketNetty onClosing (#1697) Co-authored-by: Colvin Cowie --- .../main/java/org/apache/zookeeper/ClientCnxnSocketNetty.java | 8 ++++++-- .../test/java/org/apache/zookeeper/ClientCnxnSocketTest.java | 10 ++++++++++ 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/zookeeper-server/src/main/java/org/apache/zookeeper/ClientCnxnSocketNetty.java b/zookeeper-server/src/main/java/org/apache/zookeeper/ClientCnxnSocketNetty.java index df5397855..b2ca4c225 100755 --- a/zookeeper-server/src/main/java/org/apache/zookeeper/ClientCnxnSocketNetty.java +++ b/zookeeper-server/src/main/java/org/apache/zookeeper/ClientCnxnSocketNetty.java @@ -244,7 +244,9 @@ public class ClientCnxnSocketNetty extends ClientCnxnSocket { @Override void onClosing() { - firstConnect.countDown(); + if (firstConnect != null) { + firstConnect.countDown(); + } wakeupCnxn(); LOG.info("channel is told closing"); } @@ -253,7 +255,9 @@ public class ClientCnxnSocketNetty extends ClientCnxnSocket { if (needSasl.get()) { waitSasl.release(); } - outgoingQueue.add(WakeupPacket.getInstance()); + if (outgoingQueue != null) { + outgoingQueue.add(WakeupPacket.getInstance()); + } } @Override diff --git a/zookeeper-server/src/test/java/org/apache/zookeeper/ClientCnxnSocketTest.java b/zookeeper-server/src/test/java/org/apache/zookeeper/ClientCnxnSocketTest.java index e707cb332..a6e4c135d 100644 --- a/zookeeper-server/src/test/java/org/apache/zookeeper/ClientCnxnSocketTest.java +++ b/zookeeper-server/src/test/java/org/apache/zookeeper/ClientCnxnSocketTest.java @@ -90,4 +90,14 @@ public class ClientCnxnSocketTest { assertEquals("Packet len " + length + " is out of range!", e.getMessage()); } } + + @Test + public void testClientCanBeClosedWhenNotInitialized() throws IOException { + ZKClientConfig clientConfig = new ZKClientConfig(); + final ClientCnxnSocketNetty clientCnxnSocket = new ClientCnxnSocketNetty(clientConfig); + // Should not throw + clientCnxnSocket.close(); + // Call onClosing explicitly since it otherwise won't be invoked without more setup. + clientCnxnSocket.onClosing(); + } } -- cgit v1.2.1