https://bz.apache.org/bugzilla/show_bug.cgi?id=65780
Bug ID: 65780 Summary: CoyoteOutputStream should never throw NullPointerException after AsyncContext.complete() is called Product: Tomcat 10 Version: 10.0.14 Hardware: PC OS: Linux Status: NEW Severity: normal Priority: P2 Component: Catalina Assignee: dev@tomcat.apache.org Reporter: zdap...@google.com Target Milestone: ------ CoyoteOutputStream extends ServletOutputStream, so according to the Servlet/OutputStream API Javadoc, 1. The write() method should throw IOException "if the output stream has been closed", rather than NullPointerException. 2. The isReady() method should return false if "a write to this ServletOutputStream will" not succeed. However, CoyoteOutputStream sometimes does throw NullPointerException after AsyncContext.complete(). In Async Servlet applications, NullPointerException thrown from write() method might not be propagated to the application's main thread if the write is invoked asynchronously. In Async Servlet application, checking isReady() in a while loop is a normal practice. Although there shouldn't be any operation after AsyncContext.complete(), sometimes it's hard/tedious to check whether AsyncContext.complete() is already called concurrently in another thread due to race condition, before calling isReady() each time. The issue is found in Embedded Tomcat 10. The issue should also apply to Tomcat 9, but I have not observed it in that version though. -- 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