dougm       00/09/22 11:52:04

  Modified:    .        Changes
               src/modules/perl mod_perl.h perl_config.c
  Log:
  plug leak in DIR_MERGE
  rename mod_perl_cleanup_av -> mod_perl_cleanup_sv
  
  Revision  Changes    Path
  1.517     +2 -0      modperl/Changes
  
  Index: Changes
  ===================================================================
  RCS file: /home/cvs/modperl/Changes,v
  retrieving revision 1.516
  retrieving revision 1.517
  diff -u -r1.516 -r1.517
  --- Changes   2000/09/13 07:48:55     1.516
  +++ Changes   2000/09/22 18:51:52     1.517
  @@ -10,6 +10,8 @@
   
   =item 1.24_01-dev
   
  +plug leak in DIR_MERGE, thanks to Matt Sergeant for the spot
  +
   fixes to run and pass 'make test' on ActivePerl [Randy Kobes, Gerald Richter]
   
   Makefile.PL:post_initialize fix for win32, thanks to john sterling for 
  
  
  
  1.103     +1 -1      modperl/src/modules/perl/mod_perl.h
  
  Index: mod_perl.h
  ===================================================================
  RCS file: /home/cvs/modperl/src/modules/perl/mod_perl.h,v
  retrieving revision 1.102
  retrieving revision 1.103
  diff -u -r1.102 -r1.103
  --- mod_perl.h        2000/08/15 19:36:33     1.102
  +++ mod_perl.h        2000/09/22 18:51:59     1.103
  @@ -1132,7 +1132,7 @@
   void perl_setup_env(request_rec *r);
   SV  *perl_bless_request_rec(request_rec *); 
   void perl_set_request_rec(request_rec *); 
  -void mod_perl_cleanup_av(void *data);
  +void mod_perl_cleanup_sv(void *data);
   void mod_perl_cleanup_handler(void *data);
   void mod_perl_end_cleanup(void *data);
   void mod_perl_register_cleanup(request_rec *r, SV *sv);
  
  
  
  1.102     +18 -11    modperl/src/modules/perl/perl_config.c
  
  Index: perl_config.c
  ===================================================================
  RCS file: /home/cvs/modperl/src/modules/perl/perl_config.c,v
  retrieving revision 1.101
  retrieving revision 1.102
  diff -u -r1.101 -r1.102
  --- perl_config.c     2000/08/15 19:36:33     1.101
  +++ perl_config.c     2000/09/22 18:52:00     1.102
  @@ -436,7 +436,7 @@
       sva = newSVpv(arg,0); 
       if(!*cmd) { 
           *cmd = newAV(); 
  -     register_cleanup(p, (void*)*cmd, mod_perl_cleanup_av, mod_perl_noop);
  +     register_cleanup(p, (void*)*cmd, mod_perl_cleanup_sv, mod_perl_noop);
        MP_TRACE_d(fprintf(stderr, "init `%s' stack\n", hook)); 
       } 
       MP_TRACE_d(fprintf(stderr, "perl_cmd_push_handlers: @%s, '%s'\n", hook, arg)); 
  @@ -823,13 +823,13 @@
       return NULL;
   }
   
  -void mod_perl_cleanup_av(void *data)
  +void mod_perl_cleanup_sv(void *data)
   {
  -    AV *av = (AV*)data;
  -    if(SvREFCNT((SV*)av)) {
  -     MP_TRACE_g(fprintf(stderr, "cleanup_av: SvREFCNT(0x%lx)==%d\n", 
  -                        (unsigned long)av, (int)SvREFCNT((SV*)av)));
  -     SvREFCNT_dec((SV*)av);
  +    SV *sv = (SV*)data;
  +    if (SvREFCNT(sv)) {
  +        MP_TRACE_g(fprintf(stderr, "cleanup_sv: SvREFCNT(0x%lx)==%d\n",
  +                           (unsigned long)sv, (int)SvREFCNT(sv)));
  +        SvREFCNT_dec(sv);
       }
   }
   
  @@ -929,7 +929,7 @@
        *basevp = (mod_perl_perl_dir_config *)basev,
        *addvp  = (mod_perl_perl_dir_config *)addv;
   
  -    SV *sv, 
  +    SV *sv=Nullsv, 
        *basesv = basevp ? basevp->obj : Nullsv,
        *addsv  = addvp  ? addvp->obj  : Nullsv;
   
  @@ -958,16 +958,23 @@
        if((perl_eval_ok(NULL) == OK) && (count == 1)) {
            sv = POPs;
            ++SvREFCNT(sv);
  -         mrg->obj = sv;
            mrg->pclass = SvCLASS(sv);
        }
        PUTBACK;
        FREETMPS;LEAVE;
       }
       else {
  -     mrg->obj = newSVsv(basesv);
  -     mrg->pclass = basevp->pclass;
  +        sv = newSVsv(basesv);
  +        mrg->pclass = basevp->pclass;
       }
  +
  +    if (sv) {
  +        mrg->obj = sv;
  +        register_cleanup(p, (void*)mrg,
  +                         perl_perl_cmd_cleanup, mod_perl_noop);
  +
  +    }
  +
       return (void *)mrg;
   }
   
  
  
  

Reply via email to