https://issues.apache.org/bugzilla/show_bug.cgi?id=51180

             Bug #: 51180
           Summary: AsyncContextImpl With
                    org.apache.coyote.http11.Http11NioProtocol Closes
                    Connection Immediately Upon First Request
           Product: Tomcat 7
           Version: 7.0.12
          Platform: All
        OS/Version: All
            Status: NEW
          Severity: blocker
          Priority: P2
         Component: Catalina
        AssignedTo: dev@tomcat.apache.org
        ReportedBy: psniv...@vmware.com
    Classification: Unclassified


On a connector configured with org.apache.coyote.http11.Http11NioProtocol, the
first request to a 3.0 servlet results in an NPE. Successive requests behave
correctly. Below is a catalina.out log excerpt covering two identical
consecutive requests, created with
"org.apache.catalina.core.AsyncContextImpl.level = FINE" added to the end of
conf/logging.properties:


May 9, 2011 11:33:55 AM org.apache.catalina.core.AsyncContextImpl logDebug
FINE: Req:     null  CReq:     null  RP:     null  Stage: -  Thread:
ttp-nio-8080"-exec-1  State:                  N/A  Method: Constructor  URI:
N/A
05/09 11:33:55 DEBUG[akka:event-driven:dispatcher:global-2]
a.d.MonitorableThread - Created thread akka:event-driven:dispatcher:global-2
05/09 11:33:56 DEBUG[akka:event-driven:dispatcher:global-2] c.s.RootService -
Received HttpRequest(GET,http://localhost:8080/hello/CliveBarker,List(host:
localhost:8080, user-agent: Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.6;
en-US; rv:1.9.2.17) Gecko/20110420 Firefox/3.6.17, Accept:
MediaType(text/html), MediaType(application/xhtml+xml),
MediaType(application/xml), MediaRange(*/*), Accept-Encoding: gzip, deflate,
Accept-Charset: Charset(ISO-8859-1), Charset(UTF-8), CharsetRange(*),
keep-alive: 115, connection: keep-alive, cookie:
__utma=111872281.1546197940.1294377584.1295211055.1295212368.20;
__utmz=111872281.1294377584.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none)),None,Some(0:0:0:0:0:0:0:1%0),Some(HTTP/1.1))
with one attached service, dispatching...
05/09 11:33:56 DEBUG[akka:event-driven:dispatcher:global-3]
a.d.MonitorableThread - Created thread akka:event-driven:dispatcher:global-3
05/09 11:33:56 DEBUG[akka:event-driven:dispatcher:global-3]
c.v.v.v.e.HelloServiceBuilder - *** HTTP GET METHOD RECEIVED ON PATH WITH KEY
CliveBarker, CALLING PERSISTENCE SERVICE ***
05/09 11:33:56 DEBUG[akka:event-driven:dispatcher:global-4]
a.d.MonitorableThread - Created thread akka:event-driven:dispatcher:global-4
05/09 11:33:56 DEBUG[akka:event-driven:dispatcher:global-4] c.r.RedisClient -
C: *2\r\n$3\r\nGET\r\n$28\r\npersistentHellos:CliveBarker\r\n
May 9, 2011 11:33:56 AM org.apache.catalina.core.AsyncContextImpl logDebug
FINE: Req: 3ac58af4  CReq: 7f25b750  RP:  5262667  Stage: 3  Thread:
ttp-nio-8080"-exec-2  State:                  N/A  Method: complete     URI:
/hello/CliveBarker
May 9, 2011 11:33:56 AM org.apache.catalina.core.AsyncContextImpl logDebug
FINE: Req: 3ac58af4  CReq: 7f25b750  RP:  5262667  Stage: 3  Thread:
ttp-nio-8080"-exec-3  State:                  N/A  Method: recycle      URI:
/hello/CliveBarker
05/09 11:33:56 DEBUG[akka:event-driven:dispatcher:global-4]
c.v.v.v.e.HelloServiceBuilder$PersistenceService - *** 'GET DIDN'T FIND KEY
CliveBarker, RETURNING NONE ***
05/09 11:33:56 DEBUG[akka:event-driven:dispatcher:global-3]
c.v.v.v.e.HelloServiceBuilder - *** PERSISTENCE SERVICE DIDN'T RETURN OBJECT
FOR KEY CliveBarker, RETURNING 403 TO CLIENT ***
05/09 11:33:56 ERROR[akka:event-driven:dispatcher:global-3]
a.h.Servlet30ContextMethodFactory$$anon$2 - Failed to write data to connection
on resume - the client probably disconnected
java.lang.NullPointerException: null
    at
cc.spray.ServletConverter$$anonfun$fromSprayResponse$1.apply(ServletConverter.scala:88)
~[spray_2.8.1-0.5.0.jar:na]
    at
cc.spray.ServletConverter$$anonfun$fromSprayResponse$1.apply(ServletConverter.scala:87)
~[spray_2.8.1-0.5.0.jar:na]
    at akka.http.RequestMethod$class.rawComplete(Mist.scala:394)
~[akka-http-1.0.jar:na]
    at akka.http.Get.rawComplete(Mist.scala:458) [akka-http-1.0.jar:na]
    at
cc.spray.RootService.cc$spray$RootService$$completeRequest(RootService.scala:80)
[spray_2.8.1-0.5.0.jar:na]
    at
cc.spray.RootService$$anonfun$cc$spray$RootService$$handleOneService$1.apply(RootService.scala:57)
[spray_2.8.1-0.5.0.jar:na]
    at
cc.spray.RootService$$anonfun$cc$spray$RootService$$handleOneService$1.apply(RootService.scala:57)
[spray_2.8.1-0.5.0.jar:na]
    at
akka.dispatch.DefaultCompletableFuture.akka$dispatch$DefaultCompletableFuture$$notifyListener(Future.scala:324)
[akka-actor-1.0.jar:na]
    at
akka.dispatch.DefaultCompletableFuture$$anonfun$notifyListeners$1.apply(Future.scala:320)
[akka-actor-1.0.jar:na]
    at
akka.dispatch.DefaultCompletableFuture$$anonfun$notifyListeners$1.apply(Future.scala:319)
[akka-actor-1.0.jar:na]
    at
scala.collection.LinearSeqOptimized$class.foreach(LinearSeqOptimized.scala:61)
[scala-library.jar:na]
    at scala.collection.immutable.List.foreach(List.scala:45)
[scala-library.jar:na]
    at akka.dispatch.DefaultCompletableFuture.notifyListeners(Future.scala:319)
[akka-actor-1.0.jar:na]
    at
akka.dispatch.DefaultCompletableFuture.completeWithResult(Future.scala:279)
[akka-actor-1.0.jar:na]
    at akka.actor.ScalaActorRef$$anon$1.$bang(ActorRef.scala:1398)
[akka-actor-1.0.jar:na]
    at cc.spray.HttpServiceActor$$anon$1.apply(HttpServiceActor.scala:39)
[spray_2.8.1-0.5.0.jar:na]
    at cc.spray.HttpServiceActor$$anon$1.apply(HttpServiceActor.scala:37)
[spray_2.8.1-0.5.0.jar:na]
    at cc.spray.RequestContext.reject(RequestContext.scala:67)
[spray_2.8.1-0.5.0.jar:na]
    at
cc.spray.builders.MiscBuilders$$anon$1$$anonfun$$tilde$1$$anonfun$apply$1$$anonfun$apply$2.apply(MiscBuilders.scala:80)
[spray_2.8.1-0.5.0.jar:na]
    at
cc.spray.builders.MiscBuilders$$anon$1$$anonfun$$tilde$1$$anonfun$apply$1$$anonfun$apply$2.apply(MiscBuilders.scala:78)
[spray_2.8.1-0.5.0.jar:na]
    at cc.spray.RequestContext.reject(RequestContext.scala:67)
[spray_2.8.1-0.5.0.jar:na]
    at
cc.spray.builders.FilterRoute$$anonfun$fromRouting$1.apply(FilterBuilders.scala:59)
[spray_2.8.1-0.5.0.jar:na]
    at
cc.spray.builders.FilterRoute$$anonfun$fromRouting$1.apply(FilterBuilders.scala:56)
[spray_2.8.1-0.5.0.jar:na]
    at
cc.spray.builders.MiscBuilders$$anon$1$$anonfun$$tilde$1$$anonfun$apply$1.apply(MiscBuilders.scala:76)
[spray_2.8.1-0.5.0.jar:na]
    at
cc.spray.builders.MiscBuilders$$anon$1$$anonfun$$tilde$1$$anonfun$apply$1.apply(MiscBuilders.scala:74)
[spray_2.8.1-0.5.0.jar:na]
    at cc.spray.RequestContext.reject(RequestContext.scala:67)
[spray_2.8.1-0.5.0.jar:na]
    at
cc.spray.builders.MiscBuilders$$anon$1$$anonfun$$tilde$1$$anonfun$apply$1$$anonfun$apply$2.apply(MiscBuilders.scala:80)
[spray_2.8.1-0.5.0.jar:na]
    at
cc.spray.builders.MiscBuilders$$anon$1$$anonfun$$tilde$1$$anonfun$apply$1$$anonfun$apply$2.apply(MiscBuilders.scala:78)
[spray_2.8.1-0.5.0.jar:na]
    at cc.spray.RequestContext.reject(RequestContext.scala:67)
[spray_2.8.1-0.5.0.jar:na]
    at
cc.spray.builders.FilterRoute$$anonfun$fromRouting$1.apply(FilterBuilders.scala:59)
[spray_2.8.1-0.5.0.jar:na]
    at
cc.spray.builders.FilterRoute$$anonfun$fromRouting$1.apply(FilterBuilders.scala:56)
[spray_2.8.1-0.5.0.jar:na]
    at
cc.spray.builders.MiscBuilders$$anon$1$$anonfun$$tilde$1$$anonfun$apply$1.apply(MiscBuilders.scala:76)
[spray_2.8.1-0.5.0.jar:na]
    at
cc.spray.builders.MiscBuilders$$anon$1$$anonfun$$tilde$1$$anonfun$apply$1.apply(MiscBuilders.scala:74)
[spray_2.8.1-0.5.0.jar:na]
    at cc.spray.RequestContext.reject(RequestContext.scala:67)
[spray_2.8.1-0.5.0.jar:na]
    at cc.spray.RequestContext.reject(RequestContext.scala:62)
[spray_2.8.1-0.5.0.jar:na]
    at
com.vmware.vcloud.vmole.example.HelloServiceBuilder$$anonfun$helloService$1$$anonfun$apply$3.apply(HelloServiceBuilder.scala:107)
[HelloServiceBuilder$$anonfun$helloService$1$$anonfun$apply$3.class:na]
    at
com.vmware.vcloud.vmole.example.HelloServiceBuilder$$anonfun$helloService$1$$anonfun$apply$3.apply(HelloServiceBuilder.scala:98)
[HelloServiceBuilder$$anonfun$helloService$1$$anonfun$apply$3.class:na]
    at
cc.spray.builders.FilterRoute$$anonfun$fromRouting$1.apply(FilterBuilders.scala:58)
[spray_2.8.1-0.5.0.jar:na]
    at
cc.spray.builders.FilterRoute$$anonfun$fromRouting$1.apply(FilterBuilders.scala:56)
[spray_2.8.1-0.5.0.jar:na]
    at
cc.spray.builders.MiscBuilders$$anon$1$$anonfun$$tilde$1.apply(MiscBuilders.scala:72)
[spray_2.8.1-0.5.0.jar:na]
    at
cc.spray.builders.MiscBuilders$$anon$1$$anonfun$$tilde$1.apply(MiscBuilders.scala:71)
[spray_2.8.1-0.5.0.jar:na]
    at
cc.spray.builders.FilterRoute$$anonfun$fromRouting$1.apply(FilterBuilders.scala:58)
[spray_2.8.1-0.5.0.jar:na]
    at
cc.spray.builders.FilterRoute$$anonfun$fromRouting$1.apply(FilterBuilders.scala:56)
[spray_2.8.1-0.5.0.jar:na]
    at
cc.spray.builders.FilterRoute$$anonfun$fromRouting$1.apply(FilterBuilders.scala:58)
[spray_2.8.1-0.5.0.jar:na]
    at
cc.spray.builders.FilterRoute$$anonfun$fromRouting$1.apply(FilterBuilders.scala:56)
[spray_2.8.1-0.5.0.jar:na]
    at
cc.spray.builders.MiscBuilders$$anon$1$$anonfun$$tilde$1.apply(MiscBuilders.scala:72)
[spray_2.8.1-0.5.0.jar:na]
    at
cc.spray.builders.MiscBuilders$$anon$1$$anonfun$$tilde$1.apply(MiscBuilders.scala:71)
[spray_2.8.1-0.5.0.jar:na]
    at cc.spray.HttpServiceLogic$class.handle(HttpServiceLogic.scala:33)
[spray_2.8.1-0.5.0.jar:na]
    at
com.vmware.vcloud.vmole.example.CustomHttpService.handle(HelloServiceBuilder.scala:50)
[CustomHttpService.class:na]
    at
cc.spray.HttpServiceActor$$anonfun$receive$1.apply(HttpServiceActor.scala:34)
[spray_2.8.1-0.5.0.jar:na]
    at
cc.spray.HttpServiceActor$$anonfun$receive$1.apply(HttpServiceActor.scala:33)
[spray_2.8.1-0.5.0.jar:na]
    at akka.actor.Actor$$anonfun$4.apply(Actor.scala:481)
[akka-actor-1.0.jar:na]
    at akka.actor.Actor$$anonfun$4.apply(Actor.scala:464)
[akka-actor-1.0.jar:na]
    at akka.actor.Actor$class.apply(Actor.scala:435) [akka-actor-1.0.jar:na]
    at
com.vmware.vcloud.vmole.example.CustomHttpService.apply(HelloServiceBuilder.scala:50)
[CustomHttpService.class:na]
    at
akka.actor.LocalActorRef.akka$actor$LocalActorRef$$dispatch(ActorRef.scala:1012)
[akka-actor-1.0.jar:na]
    at
akka.actor.LocalActorRef$$anonfun$invoke$1.apply$mcV$sp(ActorRef.scala:832)
[akka-actor-1.0.jar:na]
    at akka.actor.LocalActorRef$$anonfun$invoke$1.apply(ActorRef.scala:828)
[akka-actor-1.0.jar:na]
    at akka.actor.LocalActorRef$$anonfun$invoke$1.apply(ActorRef.scala:828)
[akka-actor-1.0.jar:na]
    at akka.util.ReentrantGuard.withGuard(LockUtil.scala:19)
[akka-actor-1.0.jar:na]
    at akka.actor.LocalActorRef.invoke(ActorRef.scala:827)
[akka-actor-1.0.jar:na]
    at akka.dispatch.MessageInvocation.invoke(MessageHandling.scala:23)
[akka-actor-1.0.jar:na]
    at
akka.dispatch.ExecutableMailbox$class.processMailbox(ExecutorBasedEventDrivenDispatcher.scala:190)
[akka-actor-1.0.jar:na]
    at
akka.dispatch.ExecutorBasedEventDrivenDispatcher$$anon$1.processMailbox(ExecutorBasedEventDrivenDispatcher.scala:109)
[akka-actor-1.0.jar:na]
    at
akka.dispatch.ExecutableMailbox$class.run(ExecutorBasedEventDrivenDispatcher.scala:166)
[akka-actor-1.0.jar:na]
    at
akka.dispatch.ExecutorBasedEventDrivenDispatcher$$anon$1.run(ExecutorBasedEventDrivenDispatcher.scala:109)
[akka-actor-1.0.jar:na]
    at
java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
[na:1.6.0_24]
    at
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
[na:1.6.0_24]
    at java.lang.Thread.run(Thread.java:680) [na:1.6.0_24]
    at akka.dispatch.MonitorableThread.run(ThreadPoolBuilder.scala:185)
[akka-actor-1.0.jar:na]
05/09 11:33:56 DEBUG[akka:event-driven:dispatcher:global-3]
c.v.v.v.e.HelloServiceBuilder - *** PERSISTENCE SERVICE TIMED OUT FOR KEY
CliveBarker, RETURNING 403 TO CLIENT ***
May 9, 2011 11:33:59 AM org.apache.catalina.core.AsyncContextImpl logDebug
FINE: Req:     null  CReq:     null  RP:     null  Stage: -  Thread:
ttp-nio-8080"-exec-4  State:                  N/A  Method: Constructor  URI:
N/A
05/09 11:33:59 DEBUG[akka:event-driven:dispatcher:global-5]
a.d.MonitorableThread - Created thread akka:event-driven:dispatcher:global-5
05/09 11:33:59 DEBUG[akka:event-driven:dispatcher:global-5] c.s.RootService -
Received HttpRequest(GET,http://localhost:8080/hello/CliveBarker,List(host:
localhost:8080, user-agent: Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.6;
en-US; rv:1.9.2.17) Gecko/20110420 Firefox/3.6.17, Accept:
MediaType(text/html), MediaType(application/xhtml+xml),
MediaType(application/xml), MediaRange(*/*), Accept-Encoding: gzip, deflate,
Accept-Charset: Charset(ISO-8859-1), Charset(UTF-8), CharsetRange(*),
keep-alive: 115, connection: keep-alive, cookie:
__utma=111872281.1546197940.1294377584.1295211055.1295212368.20;
__utmz=111872281.1294377584.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none)),None,Some(0:0:0:0:0:0:0:1%0),Some(HTTP/1.1))
with one attached service, dispatching...
05/09 11:33:59 DEBUG[akka:event-driven:dispatcher:global-6]
a.d.MonitorableThread - Created thread akka:event-driven:dispatcher:global-6
05/09 11:33:59 DEBUG[akka:event-driven:dispatcher:global-6]
c.v.v.v.e.HelloServiceBuilder - *** HTTP GET METHOD RECEIVED ON PATH WITH KEY
CliveBarker, CALLING PERSISTENCE SERVICE ***
05/09 11:33:59 DEBUG[akka:event-driven:dispatcher:global-7]
a.d.MonitorableThread - Created thread akka:event-driven:dispatcher:global-7
05/09 11:33:59 DEBUG[akka:event-driven:dispatcher:global-7] c.r.RedisClient -
C: *2\r\n$3\r\nGET\r\n$28\r\npersistentHellos:CliveBarker\r\n
05/09 11:33:59 DEBUG[akka:event-driven:dispatcher:global-7]
c.v.v.v.e.HelloServiceBuilder$PersistenceService - *** 'GET DIDN'T FIND KEY
CliveBarker, RETURNING NONE ***
05/09 11:33:59 DEBUG[akka:event-driven:dispatcher:global-6]
c.v.v.v.e.HelloServiceBuilder - *** PERSISTENCE SERVICE DIDN'T RETURN OBJECT
FOR KEY CliveBarker, RETURNING 403 TO CLIENT ***
May 9, 2011 11:33:59 AM org.apache.catalina.core.AsyncContextImpl logDebug
FINE: Req: 3ac58af4  CReq: 7f25b750  RP:  5262667  Stage: 7  Thread:
:dispatcher:global-6  State:                  N/A  Method: complete     URI:
/hello/CliveBarker
05/09 11:33:59 DEBUG[akka:event-driven:dispatcher:global-6]
c.v.v.v.e.HelloServiceBuilder - *** PERSISTENCE SERVICE TIMED OUT FOR KEY
CliveBarker, RETURNING 403 TO CLIENT ***
May 9, 2011 11:33:59 AM org.apache.catalina.core.AsyncContextImpl logDebug
FINE: Req: 3ac58af4  CReq: 7f25b750  RP:  5262667  Stage: 3  Thread:
ttp-nio-8080"-exec-6  State:                  N/A  Method: recycle      URI:
/hello/CliveBarker

As you can see, on the first request, the AsyncContextImpl has complete()ed and
recycle()d the connection immediately upon the main thread returning control.
On the second request, however, the AsyncContextImpl does not complete() and
recycle() the connection until after the forked thread has complete()ed the
context.

-- 
Configure bugmail: https://issues.apache.org/bugzilla/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are the assignee for the bug.

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org
For additional commands, e-mail: dev-h...@tomcat.apache.org

Reply via email to