THRIFT-1795 Race condition in TThreadedServerPool java implementation
Patch: Venkat Ranganathan
diff --git a/lib/java/src/org/apache/thrift/server/TNonblockingServer.java b/lib/java/src/org/apache/thrift/server/TNonblockingServer.java
index dccae52..169ae5c 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 @@
   }
 
   // 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 @@
     // 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 6e92801..4dfc176 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 @@
 
   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 9a68c76..19e51af 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 @@
   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 04179e6..23ec842 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 @@
   }
 
   // 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 @@
       }
       acceptThread = new AcceptThread((TNonblockingServerTransport) serverTransport_,
         createSelectorThreadLoadBalancer(selectorThreads));
-      stopped_ = false;
       for (SelectorThread thread : selectorThreads) {
         thread.start();
       }