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