Mantis - Resin
|
|||||
Viewing Issue Advanced Details | |||||
|
|||||
ID: | Category: | Severity: | Reproducibility: | Date Submitted: | Last Update: |
4697 | minor | always | 08-03-11 10:06 | 08-04-11 11:54 | |
|
|||||
Reporter: | ferg | Platform: | |||
Assigned To: | ferg | OS: | |||
Priority: | normal | OS Version: | |||
Status: | closed | Product Version: | |||
Product Build: | Resolution: | fixed | |||
Projection: | none | ||||
ETA: | none | Fixed in Version: | 4.0.21 | ||
|
|||||
Summary: | 0004697: async onComplete is calling GET | ||||
Description: |
(rep by Adrian Sutton) We've been trying to track down an exception we see quite regularly in the resin logs: java.lang.IllegalStateException: Comet cannot be requested after complete(). at com.caucho.network.listen.TcpSocketLink.toComet(TcpSocketLink.java:1393) at com.caucho.server.http.AsyncContextImpl.restart(AsyncContextImpl.java:85) at com.caucho.server.http.HttpServletRequestImpl.startAsync(HttpServletRequestImpl.java:1774) at com.caucho.server.http.CauchoRequestWrapper.startAsync(CauchoRequestWrapper.java:326) at com.foo.hcf.push.PushServlet.parkAsyncContext(PushServlet.java:146) at com.foo.hcf.push.PushServlet.handleRequest(PushServlet.java:106) at com.foo.hcf.push.PushServlet.doPost(PushServlet.java:59) at javax.servlet.http.HttpServlet.service(HttpServlet.java:158) at javax.servlet.http.HttpServlet.service(HttpServlet.java:96) at com.caucho.server.dispatch.ServletFilterChain.doFilter(ServletFilterChain.java:109) at com.lmax.hcf.web.InvocationContextFilter.doFilter(InvocationContextFilter.java:70) at com.caucho.server.dispatch.FilterFilterChain.doFilter(FilterFilterChain.java:89) at com.caucho.server.webapp.DispatchFilterChain.doFilter(DispatchFilterChain.java:126) at com.caucho.server.webapp.ResumeFilterChain.doFilter(ResumeFilterChain.java:142) at com.caucho.server.dispatch.ServletInvocation.service(ServletInvocation.java:287) at com.caucho.server.webapp.RequestDispatcherImpl.dispatchResume(RequestDispatcherImpl.java:510) at com.caucho.server.webapp.RequestDispatcherImpl.dispatchResume(RequestDispatcherImpl.java:124) at com.caucho.server.http.AbstractHttpRequest.handleResume(AbstractHttpRequest.java:1524) at com.caucho.network.listen.TcpSocketLink.handleResumeTask(TcpSocketLink.java:974) at com.caucho.network.listen.CometResumeTask.doTask(CometResumeTask.java:60) at com.caucho.network.listen.ConnectionTask.runThread(ConnectionTask.java:97) at com.caucho.network.listen.ConnectionTask.run(ConnectionTask.java:80) at com.caucho.network.listen.CometResumeTask.run(CometResumeTask.java:51) at com.caucho.env.thread.ResinThread.runTasks(ResinThread.java:164) at com.caucho.env.thread.ResinThread.run(ResinThread.java:130) I believe this is occurring because when we call asyncContext.complete(), the request is passed back through doGet/doPost again, at the end of which we try to call request.startAsync again. As I understand it, asyncContext.complete() just cause the response to be committed "as-is" and not trigger a final processing by the servlet class. Let me know if you need any further information etc. |
||||
Steps To Reproduce: | |||||
Additional Information: | |||||
Relationships | |||||
Attached Files: |
Notes | |||||
|
|||||
|
|