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