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-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org