From 5d06db63cf7077cffff52f46f44317f48fd01c65 Mon Sep 17 00:00:00 2001 From: Roger Meier Date: Sun, 23 Dec 2012 17:20:20 +0100 Subject: [PATCH] THRIFT-1795 Race condition in TThreadedServerPool java implementation Patch: Venkat Ranganathan --- lib/java/src/org/apache/thrift/server/TNonblockingServer.java | 4 ++-- lib/java/src/org/apache/thrift/server/TSimpleServer.java | 4 ++-- lib/java/src/org/apache/thrift/server/TThreadPoolServer.java | 3 ++- .../src/org/apache/thrift/server/TThreadedSelectorServer.java | 4 ++-- 4 files changed, 8 insertions(+), 7 deletions(-) diff --git a/lib/java/src/org/apache/thrift/server/TNonblockingServer.java b/lib/java/src/org/apache/thrift/server/TNonblockingServer.java index dccae527..169ae5cb 100644 --- a/lib/java/src/org/apache/thrift/server/TNonblockingServer.java +++ b/lib/java/src/org/apache/thrift/server/TNonblockingServer.java @@ -48,7 +48,8 @@ public class TNonblockingServer extends AbstractNonblockingServer { } // Flag for stopping the server - private volatile boolean stopped_ = true; + // Please see THRIFT-1795 for the usage of this flag + private volatile boolean stopped_ = false; private SelectAcceptThread selectAcceptThread_; @@ -68,7 +69,6 @@ public class TNonblockingServer extends AbstractNonblockingServer { // start the selector try { selectAcceptThread_ = new SelectAcceptThread((TNonblockingServerTransport)serverTransport_); - stopped_ = false; selectAcceptThread_.start(); return true; } catch (IOException e) { diff --git a/lib/java/src/org/apache/thrift/server/TSimpleServer.java b/lib/java/src/org/apache/thrift/server/TSimpleServer.java index 6e928019..4dfc1766 100644 --- a/lib/java/src/org/apache/thrift/server/TSimpleServer.java +++ b/lib/java/src/org/apache/thrift/server/TSimpleServer.java @@ -35,14 +35,14 @@ public class TSimpleServer extends TServer { private static final Logger LOGGER = LoggerFactory.getLogger(TSimpleServer.class.getName()); - private boolean stopped_ = false; + // Please see THRIFT-1795 for the usage of this flag + private volatile boolean stopped_ = false; public TSimpleServer(AbstractServerArgs args) { super(args); } public void serve() { - stopped_ = false; try { serverTransport_.listen(); } catch (TTransportException ttx) { diff --git a/lib/java/src/org/apache/thrift/server/TThreadPoolServer.java b/lib/java/src/org/apache/thrift/server/TThreadPoolServer.java index 9a68c763..19e51af4 100644 --- a/lib/java/src/org/apache/thrift/server/TThreadPoolServer.java +++ b/lib/java/src/org/apache/thrift/server/TThreadPoolServer.java @@ -73,7 +73,8 @@ public class TThreadPoolServer extends TServer { private ExecutorService executorService_; // Flag for stopping the server - private volatile boolean stopped_; + // Please see THRIFT-1795 for the usage of this flag + private volatile boolean stopped_ = false; private final TimeUnit stopTimeoutUnit; diff --git a/lib/java/src/org/apache/thrift/server/TThreadedSelectorServer.java b/lib/java/src/org/apache/thrift/server/TThreadedSelectorServer.java index 04179e64..23ec842a 100644 --- a/lib/java/src/org/apache/thrift/server/TThreadedSelectorServer.java +++ b/lib/java/src/org/apache/thrift/server/TThreadedSelectorServer.java @@ -181,7 +181,8 @@ public class TThreadedSelectorServer extends AbstractNonblockingServer { } // Flag for stopping the server - private volatile boolean stopped_ = true; + // Please see THRIFT-1795 for the usage of this flag + private volatile boolean stopped_ = false; // The thread handling all accepts private AcceptThread acceptThread; @@ -220,7 +221,6 @@ public class TThreadedSelectorServer extends AbstractNonblockingServer { } acceptThread = new AcceptThread((TNonblockingServerTransport) serverTransport_, createSelectorThreadLoadBalancer(selectorThreads)); - stopped_ = false; for (SelectorThread thread : selectorThreads) { thread.start(); } -- 2.17.1