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

Reply via email to