Author: torsten
Date: Tue Feb 14 19:29:11 2012
New Revision: 1244184
URL: http://svn.apache.org/viewvc?rev=1244184&view=rev
Log:
Fix 2 SV REFCNT bugs:
- modperl_perl_core_global_init(), the aliasing GV references the aliased
CV. Thus, it should increment the REFCNT.
- new_constsub() in modperl_const.c, same story.
The bug has been there for years. Only starting with perl 5.14 it became
visible by messages like this in the error_log:
Attempt to free unreferenced scalar: SV 0x7fc218,
Perl interpreter: 0x7cfdb0 during global destruction.
Modified:
perl/modperl/trunk/Changes
perl/modperl/trunk/src/modules/perl/modperl_const.c
perl/modperl/trunk/src/modules/perl/modperl_perl.c
Modified: perl/modperl/trunk/Changes
URL:
http://svn.apache.org/viewvc/perl/modperl/trunk/Changes?rev=1244184&r1=1244183&r2=1244184&view=diff
==============================================================================
--- perl/modperl/trunk/Changes (original)
+++ perl/modperl/trunk/Changes Tue Feb 14 19:29:11 2012
@@ -12,6 +12,10 @@ Also refer to the Apache::Test changes l
=item 2.0.6-dev
+Fix a few REFCNT bugs.
+Patch submitted by: Niko Tyni <[email protected]>
+Reviewed by: Torsten Foertsch
+
Correct the initialization of the build config in ModPerl::MM. The global
variable was only being set once on loading the module, which was before
Apache2::BuildConfig.pm had been written, leading to cwd and MP_LIBNAME
Modified: perl/modperl/trunk/src/modules/perl/modperl_const.c
URL:
http://svn.apache.org/viewvc/perl/modperl/trunk/src/modules/perl/modperl_const.c?rev=1244184&r1=1244183&r2=1244184&view=diff
==============================================================================
--- perl/modperl/trunk/src/modules/perl/modperl_const.c (original)
+++ perl/modperl/trunk/src/modules/perl/modperl_const.c Tue Feb 14 19:29:11 2012
@@ -51,7 +51,7 @@ static void new_constsub(pTHX_ constants
gv_init(alias, caller_stash, name, name_len, TRUE);
}
- GvCV_set(alias, GvCV(*gvp));
+ GvCV_set(alias, MUTABLE_CV(SvREFCNT_inc(GvCV(*gvp))));
}
}
Modified: perl/modperl/trunk/src/modules/perl/modperl_perl.c
URL:
http://svn.apache.org/viewvc/perl/modperl/trunk/src/modules/perl/modperl_perl.c?rev=1244184&r1=1244183&r2=1244184&view=diff
==============================================================================
--- perl/modperl/trunk/src/modules/perl/modperl_perl.c (original)
+++ perl/modperl/trunk/src/modules/perl/modperl_perl.c Tue Feb 14 19:29:11 2012
@@ -55,7 +55,8 @@ void modperl_perl_core_global_init(pTHX)
while (cglobals->name) {
GV *gv = gv_fetchpv(cglobals->core_name, TRUE, SVt_PVCV);
- GvCV_set(gv, get_cv(cglobals->sub_name, TRUE));
+ GvCV_set(gv,
+ MUTABLE_CV(SvREFCNT_inc(get_cv(cglobals->sub_name, TRUE))));
GvIMPORTED_CV_on(gv);
cglobals++;
}