dougm 2002/08/26 21:24:08 Modified: src/modules/perl modperl_interp.c modperl_perl.c Log: clone/destroy modperl_module_config_table if it exists (directive handler support) Revision Changes Path 1.52 +22 -1 modperl-2.0/src/modules/perl/modperl_interp.c Index: modperl_interp.c =================================================================== RCS file: /home/cvs/modperl-2.0/src/modules/perl/modperl_interp.c,v retrieving revision 1.51 retrieving revision 1.52 diff -u -r1.51 -r1.52 --- modperl_interp.c 27 Aug 2002 01:43:25 -0000 1.51 +++ modperl_interp.c 27 Aug 2002 04:24:08 -0000 1.52 @@ -38,7 +38,7 @@ modperl_interp_t *modperl_interp_new(modperl_interp_pool_t *mip, PerlInterpreter *perl) { - UV clone_flags = 0; + UV clone_flags = CLONEf_KEEP_PTR_TABLE; modperl_interp_t *interp = (modperl_interp_t *)malloc(sizeof(*interp)); @@ -62,6 +62,27 @@ PERL_SET_CONTEXT(perl); interp->perl = perl_clone(perl, clone_flags); + + { + PTR_TBL_t *source = modperl_module_config_table_get(perl, FALSE); + if (source) { + PTR_TBL_t *table = modperl_svptr_table_clone(interp->perl, + perl, + source); + + modperl_module_config_table_set(interp->perl, table); + } + } + + /* + * we keep the PL_ptr_table past perl_clone so it can be used + * within modperl_svptr_table_clone. + */ + if ((clone_flags & CLONEf_KEEP_PTR_TABLE)) { + dTHXa(interp->perl); + ptr_table_free(PL_ptr_table); + PL_ptr_table = NULL; + } modperl_interp_clone_init(interp); 1.16 +5 -0 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.15 retrieving revision 1.16 diff -u -r1.15 -r1.16 --- modperl_perl.c 27 Aug 2002 01:46:27 -0000 1.15 +++ modperl_perl.c 27 Aug 2002 04:24:08 -0000 1.16 @@ -86,6 +86,7 @@ void modperl_perl_destruct(PerlInterpreter *perl) { char **orig_environ = NULL; + PTR_TBL_t *module_commands; dTHXa(perl); PERL_SET_CONTEXT(perl); @@ -116,6 +117,10 @@ if (PL_endav) { modperl_perl_call_list(aTHX_ PL_endav, "END"); + } + + if ((module_commands = modperl_module_config_table_get(perl, FALSE))) { + modperl_svptr_table_destroy(perl, module_commands); } perl_destruct(perl);