Author: markt
Date: Tue Feb 17 21:02:09 2015
New Revision: 1660498

URL: http://svn.apache.org/r1660498
Log:
Possible fix for occasional NIO2 CI failures. Without the sync it is possible 
for a write registration to get lost.

Modified:
    tomcat/trunk/java/org/apache/tomcat/util/net/Nio2Endpoint.java

Modified: tomcat/trunk/java/org/apache/tomcat/util/net/Nio2Endpoint.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/util/net/Nio2Endpoint.java?rev=1660498&r1=1660497&r2=1660498&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/tomcat/util/net/Nio2Endpoint.java (original)
+++ tomcat/trunk/java/org/apache/tomcat/util/net/Nio2Endpoint.java Tue Feb 17 
21:02:09 2015
@@ -736,7 +736,7 @@ public class Nio2Endpoint extends Abstra
 
         private final CompletionHandler<Integer, ByteBuffer> 
writeCompletionHandler;
         private final CompletionHandler<Long, ByteBuffer[]> 
gatheringWriteCompletionHandler;
-        private final Semaphore writePending = new Semaphore(1);
+        private final Semaphore writePending = new Semaphore(1); // Guarded by 
writeCompletionHandler
         private boolean writeInterest = false; // Guarded by 
writeCompletionHandler
         private boolean writeNotify = false;
 
@@ -1199,10 +1199,12 @@ public class Nio2Endpoint extends Abstra
             // Before doing a blocking flush, make sure that any pending non
             // blocking write has completed.
             try {
-                if (writePending.tryAcquire(getNio2WriteTimeout(), 
TimeUnit.MILLISECONDS)) {
-                    writePending.release();
-                } else {
-                    throw new SocketTimeoutException();
+                synchronized(writeCompletionHandler) {
+                    if (writePending.tryAcquire(getNio2WriteTimeout(), 
TimeUnit.MILLISECONDS)) {
+                        writePending.release();
+                    } else {
+                        throw new SocketTimeoutException();
+                    }
                 }
             } catch (InterruptedException e) {
                 // Ignore



---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org
For additional commands, e-mail: dev-h...@tomcat.apache.org

Reply via email to