Author: markt
Date: Fri Aug 31 20:20:54 2012
New Revision: 1379582
URL: http://svn.apache.org/viewvc?rev=1379582&view=rev
Log:
Yet another attempt to fix Comet test failures for Connector stop.
If the endpoint is stopped - don't add sockets to the poller (it may have been
stopped already) and process the STOP event directly.
If the connector stop has completed then the executor may be null so protect
against NPEs and log when a socket couldn't be processed.
Modified:
tomcat/tc7.0.x/trunk/ (props changed)
tomcat/tc7.0.x/trunk/java/org/apache/coyote/http11/Http11AprProtocol.java
tomcat/tc7.0.x/trunk/java/org/apache/tomcat/util/net/AprEndpoint.java
tomcat/tc7.0.x/trunk/java/org/apache/tomcat/util/net/res/LocalStrings.properties
tomcat/tc7.0.x/trunk/webapps/docs/changelog.xml
Propchange: tomcat/tc7.0.x/trunk/
------------------------------------------------------------------------------
Merged /tomcat/trunk:r1379580
Modified:
tomcat/tc7.0.x/trunk/java/org/apache/coyote/http11/Http11AprProtocol.java
URL:
http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/java/org/apache/coyote/http11/Http11AprProtocol.java?rev=1379582&r1=1379581&r2=1379582&view=diff
==============================================================================
--- tomcat/tc7.0.x/trunk/java/org/apache/coyote/http11/Http11AprProtocol.java
(original)
+++ tomcat/tc7.0.x/trunk/java/org/apache/coyote/http11/Http11AprProtocol.java
Fri Aug 31 20:20:54 2012
@@ -27,6 +27,7 @@ import org.apache.juli.logging.LogFactor
import org.apache.tomcat.util.net.AbstractEndpoint;
import org.apache.tomcat.util.net.AprEndpoint;
import org.apache.tomcat.util.net.AprEndpoint.Handler;
+import org.apache.tomcat.util.net.SocketStatus;
import org.apache.tomcat.util.net.SocketWrapper;
@@ -266,6 +267,11 @@ public class Http11AprProtocol extends A
((AprEndpoint) proto.endpoint).getCometPoller().add(
socket.getSocket().longValue(),
proto.endpoint.getSoTimeout());
+ } else {
+ // Process a STOP directly
+ ((AprEndpoint) proto.endpoint).processSocket(
+ socket.getSocket().longValue(),
+ SocketStatus.STOP);
}
} else {
// Upgraded
Modified: tomcat/tc7.0.x/trunk/java/org/apache/tomcat/util/net/AprEndpoint.java
URL:
http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/java/org/apache/tomcat/util/net/AprEndpoint.java?rev=1379582&r1=1379581&r2=1379582&view=diff
==============================================================================
--- tomcat/tc7.0.x/trunk/java/org/apache/tomcat/util/net/AprEndpoint.java
(original)
+++ tomcat/tc7.0.x/trunk/java/org/apache/tomcat/util/net/AprEndpoint.java Fri
Aug 31 20:20:54 2012
@@ -23,6 +23,7 @@ import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.concurrent.ConcurrentLinkedQueue;
+import java.util.concurrent.Executor;
import java.util.concurrent.RejectedExecutionException;
import org.apache.juli.logging.Log;
@@ -842,9 +843,15 @@ public class AprEndpoint extends Abstrac
*/
protected boolean processSocket(long socket) {
try {
- SocketWrapper<Long> wrapper =
- new SocketWrapper<Long>(Long.valueOf(socket));
- getExecutor().execute(new SocketProcessor(wrapper, null));
+ Executor executor = getExecutor();
+ if (executor == null) {
+ log.warn(sm.getString("endpoint.warn.noExector",
+ Long.valueOf(socket), null));
+ } else {
+ SocketWrapper<Long> wrapper =
+ new SocketWrapper<Long>(Long.valueOf(socket));
+ executor.execute(new SocketProcessor(wrapper, null));
+ }
} catch (RejectedExecutionException x) {
log.warn("Socket processing request was rejected for:"+socket,x);
return false;
@@ -862,11 +869,17 @@ public class AprEndpoint extends Abstrac
/**
* Process given socket for an event.
*/
- protected boolean processSocket(long socket, SocketStatus status) {
+ public boolean processSocket(long socket, SocketStatus status) {
try {
- SocketWrapper<Long> wrapper =
- new SocketWrapper<Long>(Long.valueOf(socket));
- getExecutor().execute(new SocketEventProcessor(wrapper, status));
+ Executor executor = getExecutor();
+ if (executor == null) {
+ log.warn(sm.getString("endpoint.warn.noExector",
+ Long.valueOf(socket), status));
+ } else {
+ SocketWrapper<Long> wrapper =
+ new SocketWrapper<Long>(Long.valueOf(socket));
+ executor.execute(new SocketEventProcessor(wrapper, status));
+ }
} catch (RejectedExecutionException x) {
log.warn("Socket processing request was rejected for:"+socket,x);
return false;
@@ -897,11 +910,14 @@ public class AprEndpoint extends Abstrac
Thread.currentThread().setContextClassLoader(
getClass().getClassLoader());
}
- // During shutdown, executor may be null - avoid NPE
- if (!running) {
+ Executor executor = getExecutor();
+ if (executor == null) {
+ log.warn(sm.getString("endpoint.warn.noExector",
+ socket, status));
return false;
+ } else {
+ executor.execute(proc);
}
- getExecutor().execute(proc);
} finally {
if (Constants.IS_SECURITY_ENABLED) {
PrivilegedAction<Void> pa = new
PrivilegedSetTccl(loader);
Modified:
tomcat/tc7.0.x/trunk/java/org/apache/tomcat/util/net/res/LocalStrings.properties
URL:
http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/java/org/apache/tomcat/util/net/res/LocalStrings.properties?rev=1379582&r1=1379581&r2=1379582&view=diff
==============================================================================
---
tomcat/tc7.0.x/trunk/java/org/apache/tomcat/util/net/res/LocalStrings.properties
(original)
+++
tomcat/tc7.0.x/trunk/java/org/apache/tomcat/util/net/res/LocalStrings.properties
Fri Aug 31 20:20:54 2012
@@ -50,3 +50,4 @@ endpoint.debug.socketCloseFail=Failed to
endpoint.apr.noSslCertFile=Connector attribute SSLCertificateFile must be
defined when using SSL with APR
endpoint.apr.invalidSslProtocol=An invalid value [{0}] was provided for the
SSLProtocol attribute
endpoint.nio.selectorCloseFail=Failed to close selector when closing the poller
+endpoint.warn.noExector=Failed to process socket [{0}] in state [{1}] because
the executor had already been shutdown
Modified: tomcat/tc7.0.x/trunk/webapps/docs/changelog.xml
URL:
http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/webapps/docs/changelog.xml?rev=1379582&r1=1379581&r2=1379582&view=diff
==============================================================================
--- tomcat/tc7.0.x/trunk/webapps/docs/changelog.xml (original)
+++ tomcat/tc7.0.x/trunk/webapps/docs/changelog.xml Fri Aug 31 20:20:54 2012
@@ -234,6 +234,10 @@
Better parsing of line-terminators for requests using chunked encoding.
(markt)
</fix>
+ <fix>
+ Further improvements to handling of Comet END events when the connector
+ is stopped. (markt)
+ </fix>
</changelog>
</subsection>
<subsection name="Jasper">
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]