You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by ma...@apache.org on 2015/01/08 14:11:05 UTC

svn commit: r1650281 - /tomcat/trunk/java/org/apache/tomcat/util/net/Nio2Endpoint.java

Author: markt
Date: Thu Jan  8 13:11:04 2015
New Revision: 1650281

URL: http://svn.apache.org/r1650281
Log:
Separate readInterest and writeInterest
Fix failing unit test
testMessagesNonBlocking(org.apache.coyote.http11.upgrade.TestUpgrade)

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=1650281&r1=1650280&r2=1650281&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/tomcat/util/net/Nio2Endpoint.java (original)
+++ tomcat/trunk/java/org/apache/tomcat/util/net/Nio2Endpoint.java Thu Jan  8 13:11:04 2015
@@ -720,11 +720,12 @@ public class Nio2Endpoint extends Abstra
         private final CompletionHandler<Integer, SocketWrapperBase<Nio2Channel>> readCompletionHandler;
         private boolean flipped = false;
         private volatile boolean readPending = false;
-        private volatile boolean interest = true;
+        private volatile boolean readInterest = true;
 
         private final CompletionHandler<Integer, ByteBuffer> writeCompletionHandler;
         private final CompletionHandler<Long, ByteBuffer[]> gatheringWriteCompletionHandler;
         private final Semaphore writePending = new Semaphore(1);
+        private volatile boolean writeInterest = true;
 
 
         public Nio2SocketWrapper(Nio2Channel channel, Nio2Endpoint endpoint) {
@@ -735,15 +736,15 @@ public class Nio2Endpoint extends Abstra
                 public void completed(Integer nBytes, SocketWrapperBase<Nio2Channel> attachment) {
                     boolean notify = false;
                     if (log.isDebugEnabled()) {
-                        log.debug("Socket: [ + " + attachment + "], Interest: [" + interest + "]");
+                        log.debug("Socket: [ + " + attachment + "], Interest: [" + readInterest + "]");
                     }
                     synchronized (readCompletionHandler) {
                         if (nBytes.intValue() < 0) {
                             failed(new EOFException(), attachment);
                         } else {
                             readPending = false;
-                            if (interest && !Nio2Endpoint.isInline()) {
-                                interest = false;
+                            if (readInterest && !Nio2Endpoint.isInline()) {
+                                readInterest = false;
                                 notify = true;
                             }
                         }
@@ -798,11 +799,13 @@ public class Nio2Endpoint extends Abstra
                                     TimeUnit.MILLISECONDS, attachment, writeCompletionHandler);
                         } else {
                             // All data has been written
-                            if (interest && !Nio2Endpoint.isInline()) {
-                                interest = false;
+                            if (writeInterest && !Nio2Endpoint.isInline()) {
+                                writeInterest = false;
                                 notify = true;
                             }
                             writePending.release();
+                            socketWriteBuffer.clear();
+                            writeBufferFlipped = false;
                         }
                     }
                     if (notify) {
@@ -850,11 +853,13 @@ public class Nio2Endpoint extends Abstra
                                     array, gatheringWriteCompletionHandler);
                         } else {
                             // All data has been written
-                            if (interest && !Nio2Endpoint.isInline()) {
-                                interest = false;
+                            if (writeInterest && !Nio2Endpoint.isInline()) {
+                                writeInterest = false;
                                 notify = true;
                             }
                             writePending.release();
+                            socketWriteBuffer.clear();
+                            writeBufferFlipped = false;
                         }
                     }
                     if (notify) {
@@ -923,7 +928,7 @@ public class Nio2Endpoint extends Abstra
         public boolean isReady() throws IOException {
             synchronized (readCompletionHandler) {
                 if (readPending) {
-                    interest = true;
+                    readInterest = true;
                     return false;
                 }
                 ByteBuffer readBuffer = getSocket().getBufHandler().getReadBuffer();
@@ -946,7 +951,7 @@ public class Nio2Endpoint extends Abstra
                         flipped = true;
                     }
                 } else {
-                    interest = true;
+                    readInterest = true;
                 }
                 return isReady;
             }
@@ -1019,7 +1024,7 @@ public class Nio2Endpoint extends Abstra
                             flipped = true;
                         }
                     } else {
-                        interest = true;
+                        readInterest = true;
                     }
                 } else if (nRead == -1) {
                     throw new EOFException();
@@ -1255,7 +1260,7 @@ public class Nio2Endpoint extends Abstra
         public void registerWriteInterest() {
             synchronized (writeCompletionHandler) {
                 if (writePending.availablePermits() == 0) {
-                    interest = true;
+                    writeInterest = true;
                 } else {
                     // If no write is pending, notify
                     getEndpoint().processSocket(this, SocketStatus.OPEN_WRITE, true);



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