On 26/09/2011 13:46, Mark Thomas wrote: > On 26/09/2011 08:00, Konstantin Kolinko wrote: >> 2011/9/20 <ma...@apache.org>: >>> Author: markt >>> Date: Tue Sep 20 17:05:08 2011 >>> New Revision: 1173251 >>> >>> URL: http://svn.apache.org/viewvc?rev=1173251&view=rev >>> Log: >>> Don't add to Poller when socket is closing to prevent NPEs. >>> >>> Modified: >>> tomcat/tc7.0.x/trunk/ (props changed) >>> tomcat/tc7.0.x/trunk/java/org/apache/coyote/http11/Http11AprProtocol.java >>> >> >>> 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=1173251&r1=1173250&r2=1173251&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 >>> Tue Sep 20 17:05:08 2011 >>> @@ -215,7 +215,7 @@ public class Http11AprProtocol extends A >>> boolean addToPoller) { >>> processor.recycle(); >>> recycledProcessors.offer(processor); >>> - if (addToPoller) { >>> + if (addToPoller && proto.endpoint.isRunning()) { >>> ((AprEndpoint)proto.endpoint).getPoller().add( >>> socket.getSocket().longValue(), true); >>> } >>> @@ -234,7 +234,7 @@ public class Http11AprProtocol extends A >>> >>> if (processor.isAsync()) { >>> socket.setAsync(true); >>> - } else if (processor.comet) { >>> + } else if (processor.comet && proto.endpoint.isRunning()) { >>> ((AprEndpoint) proto.endpoint).getCometPoller().add( >>> socket.getSocket().longValue(), false); >>> } >> >> If the socket is not added to the poller, shouldn't it be closed instead? > > Fair point. I'll take a look. I suspect I was trying to avoid closing > the socket twice as that causes other problems.
Yep that was it. The socket will get closed when the endpoint is stopped/destroyed (depending on bindOnInit). Looking at the code in more detail I think there is probably a case for a more careful review of this code and possibly some re-factoring so stopping a connector is cleaner. Given the amount of time that this might take, I don't plan to start that now but I'll add it to the Tomcat 8 todo list. As an aside, I still see the odd Comet failure with NIO which may be related to this. Mark --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org