tomcat-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Mark Thomas <ma...@apache.org>
Subject Re: svn commit: r1173251 - in /tomcat/tc7.0.x/trunk: ./ java/org/apache/coyote/http11/Http11AprProtocol.java
Date Mon, 26 Sep 2011 16:14:12 GMT
On 26/09/2011 13:46, Mark Thomas wrote:
> On 26/09/2011 08:00, Konstantin Kolinko wrote:
>> 2011/9/20  <markt@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-unsubscribe@tomcat.apache.org
For additional commands, e-mail: dev-help@tomcat.apache.org


Mime
View raw message