Author: mturk Date: Fri Nov 10 05:55:47 2006 New Revision: 473341 URL: http://svn.apache.org/viewvc?view=rev&rev=473341 Log: Fix coredump when the client socket is inside read/write operation (not closed), and the Tomcat is shutdown. The pool was destroyed twice in that case.
Modified: tomcat/connectors/trunk/jni/native/include/tcn.h tomcat/connectors/trunk/jni/native/src/network.c Modified: tomcat/connectors/trunk/jni/native/include/tcn.h URL: http://svn.apache.org/viewvc/tomcat/connectors/trunk/jni/native/include/tcn.h?view=diff&rev=473341&r1=473340&r2=473341 ============================================================================== --- tomcat/connectors/trunk/jni/native/include/tcn.h (original) +++ tomcat/connectors/trunk/jni/native/include/tcn.h Fri Nov 10 05:55:47 2006 @@ -145,6 +145,7 @@ typedef struct { apr_pool_t *pool; + apr_pool_t *child; apr_socket_t *sock; void *opaque; char *jsbbuff; Modified: tomcat/connectors/trunk/jni/native/src/network.c URL: http://svn.apache.org/viewvc/tomcat/connectors/trunk/jni/native/src/network.c?view=diff&rev=473341&r1=473340&r2=473341 ============================================================================== --- tomcat/connectors/trunk/jni/native/src/network.c (original) +++ tomcat/connectors/trunk/jni/native/src/network.c Fri Nov 10 05:55:47 2006 @@ -202,8 +202,11 @@ if (family >= 0) a->net = &apr_socket_layer; a->opaque = s; -cleanup: + apr_pool_create(&a->child, a->pool); + return P2J(a); +cleanup: + return 0; } @@ -213,6 +216,7 @@ UNREFERENCED_STDARGS; TCN_ASSERT(sock != 0); + apr_pool_cleanup_kill(s->pool, s, sp_socket_cleanup); if (s->net && s->net->cleanup) { (*s->net->cleanup)(s->opaque); s->net = NULL; @@ -278,6 +282,10 @@ UNREFERENCED_STDARGS; TCN_ASSERT(sock != 0); + apr_pool_cleanup_kill(s->pool, s, sp_socket_cleanup); + if (s->child) { + apr_pool_clear(s->child); + } #ifdef TCN_DO_STATISTICS apr_atomic_inc32(&sp_closed); #endif @@ -373,7 +381,7 @@ a = (tcn_socket_t *)apr_pcalloc(p, sizeof(tcn_socket_t)); TCN_CHECK_ALLOCATED(a); a->pool = p; - apr_pool_cleanup_register(p, (const void *)a, + apr_pool_cleanup_register(s->child, (const void *)a, sp_socket_cleanup, apr_pool_cleanup_null); @@ -1219,7 +1227,7 @@ void *rv = NULL; UNREFERENCED(o); - TCN_ASSERT(sock != 0); + TCN_ASSERT(socket != 0); if (apr_socket_data_get(&rv, J2S(key), s->sock) != APR_SUCCESS) { rv = NULL; --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]