cvs commit: modperl/src/modules/perl mod_perl.h perl_config.c
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
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
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
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,