dougm 02/04/06 09:42:10 Modified: src/modules/perl mod_perl.c mod_perl.h modperl_perl.c Log: skip full teardown of PerlInterpreters in child_exit by default. we only need full teardown in the parent to avoid memory leaks. this will allow the server to stop much faster. Revision Changes Path 1.112 +21 -1 modperl-2.0/src/modules/perl/mod_perl.c Index: mod_perl.c =================================================================== RCS file: /home/cvs/modperl-2.0/src/modules/perl/mod_perl.c,v retrieving revision 1.111 retrieving revision 1.112 diff -u -r1.111 -r1.112 --- mod_perl.c 6 Apr 2002 01:23:17 -0000 1.111 +++ mod_perl.c 6 Apr 2002 17:42:10 -0000 1.112 @@ -466,9 +466,29 @@ return OK; } +static int modperl_destruct_level = 2; /* default is full tear down */ + +int modperl_perl_destruct_level(void) +{ + return modperl_destruct_level; +} + static apr_status_t modperl_child_exit(void *data) { - apr_pool_clear(server_pool); + char *level = NULL; + + if ((level = getenv("PERL_DESTRUCT_LEVEL"))) { + modperl_destruct_level = atoi(level); + } + else { + /* default to no teardown in the children */ + modperl_destruct_level = 0; + } + + if (modperl_destruct_level) { + apr_pool_clear(server_pool); + } + server_pool = NULL; return APR_SUCCESS; 1.41 +1 -0 modperl-2.0/src/modules/perl/mod_perl.h Index: mod_perl.h =================================================================== RCS file: /home/cvs/modperl-2.0/src/modules/perl/mod_perl.h,v retrieving revision 1.40 retrieving revision 1.41 diff -u -r1.40 -r1.41 --- mod_perl.h 8 Jan 2002 01:13:28 -0000 1.40 +++ mod_perl.h 6 Apr 2002 17:42:10 -0000 1.41 @@ -47,6 +47,7 @@ void modperl_register_hooks(apr_pool_t *p); apr_pool_t *modperl_server_pool(void); PerlInterpreter *modperl_startup(server_rec *s, apr_pool_t *p); +int modperl_perl_destruct_level(void); void xs_init(pTHXo); void modperl_response_init(request_rec *r); 1.12 +1 -1 modperl-2.0/src/modules/perl/modperl_perl.c Index: modperl_perl.c =================================================================== RCS file: /home/cvs/modperl-2.0/src/modules/perl/modperl_perl.c,v retrieving revision 1.11 retrieving revision 1.12 diff -u -r1.11 -r1.12 --- modperl_perl.c 1 Mar 2002 03:30:03 -0000 1.11 +++ modperl_perl.c 6 Apr 2002 17:42:10 -0000 1.12 @@ -90,7 +90,7 @@ PERL_SET_CONTEXT(perl); - PL_perl_destruct_level = 2; + PL_perl_destruct_level = modperl_perl_destruct_level(); #ifdef USE_ENVIRON_ARRAY /* XXX: otherwise Perl may try to free() environ multiple times