cvs commit: modperl/src/modules/perl mod_perl.h perl_config.c

2000-12-29 Thread dougm

dougm   00/12/29 21:09:01

  Modified:.Changes
   lib/Apache ExtUtils.pm
   src/modules/perl mod_perl.h perl_config.c
  Log:
  fix directive handlers bug triggered by LoadModule foo_module
  
  Revision  ChangesPath
  1.566 +2 -0  modperl/Changes
  
  Index: Changes
  ===
  RCS file: /home/cvs/modperl/Changes,v
  retrieving revision 1.565
  retrieving revision 1.566
  diff -u -r1.565 -r1.566
  --- Changes   2000/12/29 17:10:06 1.565
  +++ Changes   2000/12/30 05:08:55 1.566
  @@ -10,6 +10,8 @@
   
   =item 1.24_02-dev
   
  +fix directive handlers bug triggered by LoadModule foo_module
  +
   allow $r-finfo to be modified
   
   if Perl is linked with -lpthread, then httpd needs to be linked with
  
  
  
  1.22  +25 -3 modperl/lib/Apache/ExtUtils.pm
  
  Index: ExtUtils.pm
  ===
  RCS file: /home/cvs/modperl/lib/Apache/ExtUtils.pm,v
  retrieving revision 1.21
  retrieving revision 1.22
  diff -u -r1.21 -r1.22
  --- ExtUtils.pm   2000/12/23 02:23:09 1.21
  +++ ExtUtils.pm   2000/12/30 05:08:57 1.22
  @@ -122,6 +122,9 @@
   sub xs_cmd_table {
   my($self, $class, $cmds) = @_;
   (my $modname = $class) =~ s/::/__/g;
  +(my $pmname = $class) =~ s,::,/,g;
  +$pmname .= '.pm';
  +
   my $cmdtab = "";
   my $infos = "";
   
  @@ -252,6 +255,25 @@
   NULL,   /* [1] post read_request handling */
   };
   
  +#define this_module "$pmname"
  +
  +static void remove_module_cleanup(void *data)
  +{
  +if (find_linked_module("$class")) {
  +/* need to remove the module so module index is reset */
  +remove_module(XS_${modname});
  +}
  +if (data) {
  +/* make sure BOOT section is re-run on restarts */
  +(void)hv_delete(GvHV(incgv), this_module,
  +strlen(this_module), G_DISCARD);
  + if (dowarn) {
  + /* avoid subroutine redefined warnings */
  + perl_clear_symtab(gv_stashpv("$class", FALSE));
  + }
  +}
  +}
  +
   MODULE = $class  PACKAGE = $class
   
   PROTOTYPES: DISABLE
  @@ -260,14 +282,14 @@
   XS_${modname}.name = "$class";
   add_module(XS_${modname});
   stash_mod_pointer("$class", XS_${modname});
  +register_cleanup(perl_get_startup_pool(), (void *)1,
  + remove_module_cleanup, null_cleanup);
   
   void
   END()
   
   CODE:
  -if (find_linked_module("$class")) {
  -remove_module(XS_${modname});
  -}
  +remove_module_cleanup(NULL);
   EOF
   }
   
  
  
  
  1.107 +1 -0  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.106
  retrieving revision 1.107
  diff -u -r1.106 -r1.107
  --- mod_perl.h2000/12/20 07:24:43 1.106
  +++ mod_perl.h2000/12/30 05:08:59 1.107
  @@ -1210,6 +1210,7 @@
   void perl_perl_cmd_cleanup(void *data);
   
   void perl_section_self_boot(cmd_parms *parms, void *dummy, const char *arg);
  +void perl_clear_symtab(HV *symtab);
   CHAR_P perl_section (cmd_parms *cmd, void *dummy, CHAR_P arg);
   CHAR_P perl_end_section (cmd_parms *cmd, void *dummy);
   CHAR_P perl_pod_section (cmd_parms *cmd, void *dummy, CHAR_P arg);
  
  
  
  1.108 +5 -2  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.107
  retrieving revision 1.108
  diff -u -r1.107 -r1.108
  --- perl_config.c 2000/09/28 03:53:01 1.107
  +++ perl_config.c 2000/12/30 05:08:59 1.108
  @@ -1675,7 +1675,7 @@
   }   
   }
   
  -static void clear_symtab(HV *symtab) 
  +void perl_clear_symtab(HV *symtab) 
   {
   SV *val;
   char *key;
  @@ -1686,6 +1686,7 @@
SV *sv;
HV *hv;
AV *av;
  + CV *cv;
dTHR;
   
if((SvTYPE(val) != SVt_PVGV) || GvIMPORTED((GV*)val))
  @@ -1696,6 +1697,8 @@
hv_clear(hv);
if((av = GvAV((GV*)val)))
av_clear(av);
  + if((cv = GvCV((GV*)val)))
  + cv_undef(cv);
   }
   }
   
  @@ -1830,7 +1833,7 @@
if(usv  SvTRUE(usv))
; /* keep it around */
else
  - clear_symtab(symtab);
  + perl_clear_symtab(symtab);
   }
   return NULL;
   }
  
  
  



RE: cvs commit: modperl/src/modules/perl mod_perl.h perl_config.c

2000-09-25 Thread Geoffrey Young

pardon my being away, but does this mean that the earlier (possible) fix

Apache::ModuleConfig-get($r, __PACKAGE__)

was not the cause of the error, or that it was and the __PACKAGE__ part is
not necessary now?

I was wondering whether to fix my calls for people who weren't up to cvs
speed...

--Geoff

 -Original Message-
 From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED]]
 Sent: Friday, September 22, 2000 2:52 PM
 To: [EMAIL PROTECTED]
 Subject: cvs commit: modperl/src/modules/perl mod_perl.h perl_config.c
 
 
 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  ChangesPath
   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 -11modperl/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;
}

   
   
   
 



cvs commit: modperl/src/modules/perl mod_perl.h perl_config.c

2000-09-22 Thread dougm

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  ChangesPath
  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.h2000/08/15 19:36:33 1.102
  +++ mod_perl.h2000/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 -11modperl/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;
   }
   
  
  
  



cvs commit: modperl/src/modules/perl mod_perl.h perl_config.c

2000-07-24 Thread cholet

cholet  00/07/24 06:33:03

  Modified:src/modules/perl mod_perl.h perl_config.c
  Log:
  revert my latest change, my editor suddenly decided to untabify everything, burying 
the actual change
  
  Revision  ChangesPath
  1.100 +34 -34modperl/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.99
  retrieving revision 1.100
  diff -u -r1.99 -r1.100
  --- mod_perl.h2000/07/24 13:22:55 1.99
  +++ mod_perl.h2000/07/24 13:33:00 1.100
  @@ -64,7 +64,7 @@
   #include malloc.h
   #include win32.h
   #include win32iop.h
  -#include fcntl.h  // For O_BINARY
  +#include fcntl.h   // For O_BINARY
   #include "EXTERN.h"
   #include "perl.h"
   #include iperlsys.h
  @@ -195,7 +195,7 @@
   #endif
   
   #ifndef AvFILLp
  -#define AvFILLp(av) ((XPVAV*)  SvANY(av))-xav_fill
  +#define AvFILLp(av)  ((XPVAV*)  SvANY(av))-xav_fill
   #endif
   
   #ifdef eval_pv
  @@ -300,7 +300,7 @@
   #define av_copy_array(av) av_make(av_len(av)+1, AvARRAY(av))  
   
   #ifndef newRV_noinc
  -#define newRV_noinc(sv) ((Sv = newRV(sv)), --SvREFCNT(SvRV(Sv)), Sv)
  +#define newRV_noinc(sv)  ((Sv = newRV(sv)), --SvREFCNT(SvRV(Sv)), Sv)
   #endif
   
   #ifndef SvTAINTED_on
  @@ -349,14 +349,14 @@
   
   #define mp_debug mod_perl_debug_flags
   
  -extern U32  mp_debug;
  +extern U32   mp_debug;
   
   #ifdef PERL_TRACE
  -#define MP_TRACE(a)   if (mp_debug)  a
  -#define MP_TRACE_d(a) if (mp_debug  1)  a /* directives */
  -#define MP_TRACE_s(a) if (mp_debug  2)  a /* perl sections */
  -#define MP_TRACE_h(a) if (mp_debug  4)  a /* handlers */
  -#define MP_TRACE_g(a) if (mp_debug  8)  a /* globals and allocation */
  +#define MP_TRACE(a)   if (mp_debug)   a
  +#define MP_TRACE_d(a) if (mp_debug  1)   a /* directives */
  +#define MP_TRACE_s(a) if (mp_debug  2)   a /* perl sections */
  +#define MP_TRACE_h(a) if (mp_debug  4)   a /* handlers */
  +#define MP_TRACE_g(a) if (mp_debug  8)   a /* globals and allocation */
   #define MP_TRACE_c(a) if (mp_debug  16) a /* directive handlers */
   #ifndef PERL_MARK_WHERE
   #define PERL_MARK_WHERE
  @@ -405,14 +405,14 @@
   #define MPf_Off -1
   #define MPf_None 0
   
  -#define MPf_INCPUSH 0x0100 /* use lib split ":", $ENV{PERL5LIB} */
  -#define MPf_SENDHDR 0x0200 /* is PerlSendHeader On? */
  -#define MPf_SENTHDR 0x0400 /* has PerlSendHeader sent the headers? */
  -#define MPf_ENV 0x0800 /* PerlSetupEnv */
  -#define MPf_HASENV  0x1000 /* do we have any PerlSetEnv's? */
  -#define MPf_DSTDERR 0x2000 /* redirect stderr to error_log */
  -#define MPf_CLEANUP 0x4000 /* did we register our cleanup ? */
  -#define MPf_RCLEANUP0x8000 /* for $r-register_cleanup */
  +#define MPf_INCPUSH  0x0100 /* use lib split ":", $ENV{PERL5LIB} */
  +#define MPf_SENDHDR  0x0200 /* is PerlSendHeader On? */
  +#define MPf_SENTHDR  0x0400 /* has PerlSendHeader sent the headers? */
  +#define MPf_ENV  0x0800 /* PerlSetupEnv */
  +#define MPf_HASENV   0x1000 /* do we have any PerlSetEnv's? */
  +#define MPf_DSTDERR  0x2000 /* redirect stderr to error_log */
  +#define MPf_CLEANUP  0x4000 /* did we register our cleanup ? */
  +#define MPf_RCLEANUP 0x8000 /* for $r-register_cleanup */
   
   #define MP_FMERGE(new,add,base,f) \
   if((add-flags  f) || (base-flags  f)) \
  @@ -442,7 +442,7 @@
   #define MP_ENV_off(d)(d-flags  = ~MPf_ENV)
   #endif
   
  -#define MP_ENV(d)   (d-SetupEnv != MPf_Off)
  +#define MP_ENV(d)   (d-SetupEnv == MPf_On)
   #define MP_ENV_on(d)(d-SetupEnv = MPf_On)
   #define MP_ENV_off(d)   (d-SetupEnv = MPf_Off)
   
  @@ -535,13 +535,13 @@
   
   #define HAS_CONTEXT MODULE_MAGIC_AT_LEAST(MMN_136,2)
   #if HAS_CONTEXT
  -#define CAN_SELF_BOOT_SECTIONS  (PERL_SECTIONS_SELF_BOOT)
  -#define SECTION_ALLOWED OR_ALL
  -#define USABLE_CONTEXT  parms-context
  -#else
  -#define CAN_SELF_BOOT_SECTIONS  ((parms-path==NULL)PERL_SECTIONS_SELF_BOOT)
  -#define SECTION_ALLOWED RSRC_CONF
  -#define USABLE_CONTEXT  parms-server-lookup_defaults
  +#define CAN_SELF_BOOT_SECTIONS   (PERL_SECTIONS_SELF_BOOT)
  +#define SECTION_ALLOWED  OR_ALL
  +#define USABLE_CONTEXT   parms-context
  +#else
  +#define CAN_SELF_BOOT_SECTIONS   ((parms-path==NULL)PERL_SECTIONS_SELF_BOOT)
  +#define SECTION_ALLOWED  RSRC_CONF
  +#define USABLE_CONTEXT   parms-server-lookup_defaults
   #endif
   
   #define APACHE_SSL_12X (defined(APACHE_SSL)  (MODULE_MAGIC_NUMBER  MMN_130))
  @@ -598,7 +598,7 @@
   "access to %s failed for %s, reason: %s", \
   file, \
   get_remote_host(r-connection, \
  -r-per_dir_config, REMOTE_NAME), \
  + r-per_dir_config,