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);