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 2013/01/17 16:02:20 UTC

svn commit: r1434704 - in /tomcat/trunk/java/org/apache/coyote/http11/upgrade: AprServletInputStream.java AprServletOutputStream.java LocalStrings.properties

Author: markt
Date: Thu Jan 17 15:02:19 2013
New Revision: 1434704

URL: http://svn.apache.org/viewvc?rev=1434704&view=rev
Log:
Fix remaining Autobahn test failures with APR/native.
Once a close message has been received do not process any more messages from that connection.

Modified:
    tomcat/trunk/java/org/apache/coyote/http11/upgrade/AprServletInputStream.java
    tomcat/trunk/java/org/apache/coyote/http11/upgrade/AprServletOutputStream.java
    tomcat/trunk/java/org/apache/coyote/http11/upgrade/LocalStrings.properties

Modified: tomcat/trunk/java/org/apache/coyote/http11/upgrade/AprServletInputStream.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/http11/upgrade/AprServletInputStream.java?rev=1434704&r1=1434703&r2=1434704&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/coyote/http11/upgrade/AprServletInputStream.java (original)
+++ tomcat/trunk/java/org/apache/coyote/http11/upgrade/AprServletInputStream.java Thu Jan 17 15:02:19 2013
@@ -32,6 +32,7 @@ public class AprServletInputStream exten
     private final Lock blockingStatusReadLock;
     private final WriteLock blockingStatusWriteLock;
     private volatile boolean eagain = false;
+    private volatile boolean closed = false;
 
 
     public AprServletInputStream(SocketWrapper<Long> wrapper) {
@@ -52,6 +53,9 @@ public class AprServletInputStream exten
         try {
             blockingStatusReadLock.lock();
             if (wrapper.getBlockingStatus() == block) {
+                if (closed) {
+                    throw new IOException(sm.getString("apr.closed"));
+                }
                 result = Socket.recv(socket, b, off, len);
                 readDone = true;
             }
@@ -69,6 +73,9 @@ public class AprServletInputStream exten
                 try {
                     blockingStatusReadLock.lock();
                     blockingStatusWriteLock.unlock();
+                    if (closed) {
+                        throw new IOException(sm.getString("apr.closed"));
+                    }
                     result = Socket.recv(socket, b, off, len);
                 } finally {
                     blockingStatusReadLock.unlock();
@@ -103,7 +110,8 @@ public class AprServletInputStream exten
 
     @Override
     protected void doClose() throws IOException {
-        // NO-OP
-        // Let AbstractProcessor trigger the close
+        closed = true;
+        // AbstractProcessor needs to trigger the close as multiple closes for
+        // APR/native sockets will cause problems.
     }
 }

Modified: tomcat/trunk/java/org/apache/coyote/http11/upgrade/AprServletOutputStream.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/http11/upgrade/AprServletOutputStream.java?rev=1434704&r1=1434703&r2=1434704&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/coyote/http11/upgrade/AprServletOutputStream.java (original)
+++ tomcat/trunk/java/org/apache/coyote/http11/upgrade/AprServletOutputStream.java Thu Jan 17 15:02:19 2013
@@ -33,6 +33,7 @@ public class AprServletOutputStream exte
     private final long socket;
     private final Lock blockingStatusReadLock;
     private final WriteLock blockingStatusWriteLock;
+    private volatile boolean closed = false;
 
     public AprServletOutputStream(SocketWrapper<Long> wrapper,
             AprEndpoint endpoint) {
@@ -54,6 +55,9 @@ public class AprServletOutputStream exte
         try {
             blockingStatusReadLock.lock();
             if (wrapper.getBlockingStatus() == block) {
+                if (closed) {
+                    throw new IOException(sm.getString("apr.closed"));
+                }
                 result = Socket.send(socket, b, off, len);
                 writeDone = true;
             }
@@ -71,6 +75,9 @@ public class AprServletOutputStream exte
                 try {
                     blockingStatusReadLock.lock();
                     blockingStatusWriteLock.unlock();
+                    if (closed) {
+                        throw new IOException(sm.getString("apr.closed"));
+                    }
                     result = Socket.send(socket, b, off, len);
                 } finally {
                     blockingStatusReadLock.unlock();
@@ -108,7 +115,8 @@ public class AprServletOutputStream exte
 
     @Override
     protected void doClose() throws IOException {
-        // NO-OP
-        // Let AbstractProcessor trigger the close
+        closed = true;
+        // AbstractProcessor needs to trigger the close as multiple closes for
+        // APR/native sockets will cause problems.
     }
 }

Modified: tomcat/trunk/java/org/apache/coyote/http11/upgrade/LocalStrings.properties
URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/http11/upgrade/LocalStrings.properties?rev=1434704&r1=1434703&r2=1434704&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/coyote/http11/upgrade/LocalStrings.properties (original)
+++ tomcat/trunk/java/org/apache/coyote/http11/upgrade/LocalStrings.properties Thu Jan 17 15:02:19 2013
@@ -23,6 +23,7 @@ upgrade.sis.write.ise=It is illegal to c
 
 apr.read.error=Unexpected error [{0}] reading data from the APR/native socket.
 apr.write.error=Unexpected error [{0}] writing data to the APR/native socket.
+apr.closed=The socket associated with this connection has been closed.
 
 nio.eof.error=Unexpected EOF read on the socket
 



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