You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by mt...@apache.org on 2007/03/27 20:23:07 UTC
svn commit: r523024 - /tomcat/connectors/trunk/jni/native/src/network.c
Author: mturk
Date: Tue Mar 27 11:23:06 2007
New Revision: 523024
URL: http://svn.apache.org/viewvc?view=rev&rev=523024
Log:
Fix accept pool cleanup and destroy in case accept fails because of parent pool destroy
Modified:
tomcat/connectors/trunk/jni/native/src/network.c
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=523024&r1=523023&r2=523024
==============================================================================
--- tomcat/connectors/trunk/jni/native/src/network.c (original)
+++ tomcat/connectors/trunk/jni/native/src/network.c Tue Mar 27 11:23:06 2007
@@ -218,17 +218,18 @@
TCN_IMPLEMENT_CALL(void, Socket, destroy)(TCN_STDARGS, jlong sock)
{
tcn_socket_t *s = J2P(sock, tcn_socket_t *);
+ apr_socket_t *as;
UNREFERENCED_STDARGS;
TCN_ASSERT(sock != 0);
+ as = s->sock;
+ s->sock = NULL;
apr_pool_cleanup_kill(s->pool, s, sp_socket_cleanup);
if (s->net && s->net->cleanup) {
(*s->net->cleanup)(s->opaque);
s->net = NULL;
}
- if (s->sock) {
- apr_socket_t *as = s->sock;
- s->sock = NULL;
+ if (as) {
apr_socket_close(as);
}
@@ -284,9 +285,12 @@
{
tcn_socket_t *s = J2P(sock, tcn_socket_t *);
jint rv = APR_SUCCESS;
+ apr_socket_t *as;
UNREFERENCED_STDARGS;
TCN_ASSERT(sock != 0);
+ as = s->sock;
+ s->sock = NULL;
apr_pool_cleanup_kill(s->pool, s, sp_socket_cleanup);
if (s->child) {
apr_pool_clear(s->child);
@@ -298,9 +302,7 @@
rv = (*s->net->close)(s->opaque);
s->net = NULL;
}
- if (s->sock) {
- apr_socket_t *as = s->sock;
- s->sock = NULL;
+ if (as) {
rv = (jint)apr_socket_close(as);
}
return rv;
@@ -347,7 +349,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(a->pool, (const void *)a,
sp_socket_cleanup,
apr_pool_cleanup_null);
@@ -388,7 +390,7 @@
TCN_THROW_IF_ERR(apr_socket_accept(&n, s->sock, p), n);
a->pool = p;
- apr_pool_cleanup_register(s->child, (const void *)a,
+ apr_pool_cleanup_register(a->pool, (const void *)a,
sp_socket_cleanup,
apr_pool_cleanup_null);
@@ -407,7 +409,7 @@
}
return P2J(a);
cleanup:
- if (p)
+ if (p && s->sock)
apr_pool_destroy(p);
return 0;
}
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@tomcat.apache.org
For additional commands, e-mail: dev-help@tomcat.apache.org