From 9837aaf097729beb2d3c656bb68c9c373faa84e9 Mon Sep 17 00:00:00 2001 From: David Reiss Date: Tue, 7 Oct 2008 23:03:47 +0000 Subject: [PATCH] THRIFT-145. java: Make TNonblockingServer more robust against errors TNonblockingServer was throwing a null pointer exception in certain cases. We're not really sure what the root cause is, but this change prevents the exception and also improves logging of certain undesirable conditions. git-svn-id: https://svn.apache.org/repos/asf/incubator/thrift/trunk@702661 13f79535-47bb-0310-9956-ffa450edef68 --- .../com/facebook/thrift/server/TNonblockingServer.java | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/lib/java/src/com/facebook/thrift/server/TNonblockingServer.java b/lib/java/src/com/facebook/thrift/server/TNonblockingServer.java index 1e1284f5..47fdd5f2 100644 --- a/lib/java/src/com/facebook/thrift/server/TNonblockingServer.java +++ b/lib/java/src/com/facebook/thrift/server/TNonblockingServer.java @@ -318,6 +318,8 @@ public class TNonblockingServer extends TServer { } else if (key.isWritable()) { // deal with writes handleWrite(key); + } else { + LOGGER.log(Level.WARNING, "Unexpected state in select! " + key.interestOps()); } } } catch (IOException e) { @@ -343,9 +345,10 @@ public class TNonblockingServer extends TServer { */ private void handleAccept() throws IOException { SelectionKey clientKey = null; + TNonblockingTransport client = null; try { // accept the connection - TNonblockingTransport client = (TNonblockingTransport)serverTransport.accept(); + client = (TNonblockingTransport)serverTransport.accept(); clientKey = client.registerSelector(selector, SelectionKey.OP_READ); // add this key to the map @@ -353,9 +356,10 @@ public class TNonblockingServer extends TServer { clientKey.attach(frameBuffer); } catch (TTransportException tte) { // something went wrong accepting. - cleanupSelectionkey(clientKey); LOGGER.log(Level.WARNING, "Exception trying to accept!", tte); tte.printStackTrace(); + if (clientKey != null) cleanupSelectionkey(clientKey); + if (client != null) client.close(); } } -- 2.17.1