I had some spare time for analyzing the crashes in TestMapperWelcomeFiles. It seems there are several varieties, but at least I do now understand enough to report here:
In Http11AprProcessor.process() when parsing the request line fails, e.g. it is not yet there, we add the socket back to the poller. Then we check the endpoint for being paused. If so, we set "error" to true. At the end of process(), if "error" is true, we return SocketState.CLOSED, which in turn lets the SocketProcessor closes the socket (and destroys the native memory allocated with it). Now what I experience sporadically, is that the original thread A is thrown off the CPU after adding the socket back to the poller, but before proceeding. Another thread B now gets the socket from the poller, uses it for request processing and at the end destroys it. Now A wakes up and proceeds as described above, and since now the endpoint is paused, it also tries to destroy the socket, leading to a crash. This seems to be a flaw. I suggest we add only to the poller if we know no error occured and the endpoint is not paused. The patch for AjpApr is simpler but similar. See for both classes: http://people.apache.org/~rjung/patches/tc7-apr-add_to_poller.patch I checked this patch against one full run of the test suite with HTTP APR and also against 150 runs of TestMapperWelcomeFiles. No crashes or errors any more. WDYT? Regards, Rainer --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org