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

            Bug ID: 57157
           Summary: out.setWriteListener in runnable of
                    AsyncContext.start(runnable) cause response failed
           Product: Tomcat 8
           Version: 8.0.14
          Hardware: PC
                OS: Linux
            Status: NEW
          Severity: normal
          Priority: P2
         Component: Catalina
          Assignee: dev@tomcat.apache.org
          Reporter: zenzhong8...@gmail.com

Created attachment 32157
  --> https://issues.apache.org/bugzilla/attachment.cgi?id=32157&action=edit
related java code files

stack trace:
28-Oct-2014 11:56:26.891 SEVERE [http-nio-8080-exec-5]
org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun 
 java.lang.NullPointerException
        at
org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1538)
        at
org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1523)
        at
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
        at
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
        at
org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
        at java.lang.Thread.run(Thread.java:744)

related code:
TextReadListener
    public synchronized void onAllDataRead() throws IOException {
        logger.debug("onAllDataRead", new Exception("onAllDataRead"));
        final String text = (buf != null ? buf.toString("UTF-8") : "");
        logger.debug("onAllDataRead> text={}", text);
        HttpServletRequest req = (HttpServletRequest) asyncCtx.getRequest();
        logger.debug("onAllDataRead> uri={}, User-Agent={}, params={}",
req.getRequestURI(),
                req.getHeader("User-Agent"), req.getParameterMap());
        final ServletOutputStream out =
asyncCtx.getResponse().getOutputStream();
        asyncCtx.start(new Runnable() {
            @Override
            public void run() {
                try {
                    logger.debug("start sleep");
                    TimeUnit.SECONDS.sleep(1);
                    logger.debug("sleep finished, start writing");
                    WriteListener writeListener = new TextWriteListener(("test"
+ text).getBytes("UTF-8"), asyncCtx,
                            out);
                    out.setWriteListener(writeListener);
                } catch (Throwable e) {
                    logger.error("impossible ex", e);
                }
            }
        });
    }

If I just invoke out.setWriteListener in onAllDataRead method (not in
asyncCtx.start), then that's ok.

Detailed java code is in attachment

-- 
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