You are viewing a plain text version of this content. The canonical link for it is here.
Posted to modperl-cvs@perl.apache.org by do...@apache.org on 2002/08/27 06:24:08 UTC
cvs commit: modperl-2.0/src/modules/perl modperl_interp.c modperl_perl.c
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);