Author: torsten Date: Tue Feb 14 20:09:12 2012 New Revision: 1244196 URL: http://svn.apache.org/viewvc?rev=1244196&view=rev Log: Merged revisions 1243923,1244184 via svnmerge from https://svn.eu.apache.org/repos/asf/perl/modperl/trunk
........ r1243923 | stevehay | 2012-02-14 15:04:05 +0100 (Tue, 14 Feb 2012) | 2 lines Correct the initialization of the build config in ModPerl::MM, simply borrowing the style of ModPerl::BuildMM to do so. ........ r1244184 | torsten | 2012-02-14 20:29:11 +0100 (Tue, 14 Feb 2012) | 12 lines 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/branches/threading/ (props changed) perl/modperl/branches/threading/Changes perl/modperl/branches/threading/lib/ModPerl/MM.pm perl/modperl/branches/threading/src/modules/perl/modperl_const.c perl/modperl/branches/threading/src/modules/perl/modperl_perl.c Propchange: perl/modperl/branches/threading/ ------------------------------------------------------------------------------ --- svn:mergeinfo (original) +++ svn:mergeinfo Tue Feb 14 20:09:12 2012 @@ -1 +1 @@ -/perl/modperl/trunk:594682-672484,672819-681118,693357,700369,732889-736218,751909-752425,757553-774171,807116,807332-807649,907778-932879,933373-933563,935519,936643,940287,957309-983073,985740,987933-1023553,1029211-1052232,1062311-1062448,1066644-1074122,1076733,1083541,1089349-1096565,1124132,1125476-1145161,1213838-1222775,1241435 +/perl/modperl/trunk:594682-672484,672819-681118,693357,700369,732889-736218,751909-752425,757553-774171,807116,807332-807649,907778-932879,933373-933563,935519,936643,940287,957309-983073,985740,987933-1023553,1029211-1052232,1062311-1062448,1066644-1074122,1076733,1083541,1089349-1096565,1124132,1125476-1145161,1213838-1222775,1241435,1243923-1244184 Propchange: perl/modperl/branches/threading/ ------------------------------------------------------------------------------ --- svnmerge-integrated (original) +++ svnmerge-integrated Tue Feb 14 20:09:12 2012 @@ -1 +1 @@ -/perl/modperl/trunk:1-712967,712969-1241559 +/perl/modperl/trunk:1-712967,712969-1241872,1241874-1244192 Modified: perl/modperl/branches/threading/Changes URL: http://svn.apache.org/viewvc/perl/modperl/branches/threading/Changes?rev=1244196&r1=1244195&r2=1244196&view=diff ============================================================================== --- perl/modperl/branches/threading/Changes (original) +++ perl/modperl/branches/threading/Changes Tue Feb 14 20:09:12 2012 @@ -37,6 +37,16 @@ Expose modperl_interp_t via ModPerl::Int =item 2.0.6-dev +Fix a few REFCNT bugs. +Patch submitted by: Niko Tyni <nt...@debian.org> +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 +being unset when writing the Reload and SizeLimit makefiles. +[Steve Hay] + Discover apr-2-config from Apache 2.4 onwards. [Gozer] Apache 2.4 and onwards doesn't require linking the MPM module directly in Modified: perl/modperl/branches/threading/lib/ModPerl/MM.pm URL: http://svn.apache.org/viewvc/perl/modperl/branches/threading/lib/ModPerl/MM.pm?rev=1244196&r1=1244195&r2=1244196&view=diff ============================================================================== --- perl/modperl/branches/threading/lib/ModPerl/MM.pm (original) +++ perl/modperl/branches/threading/lib/ModPerl/MM.pm Tue Feb 14 20:09:12 2012 @@ -70,10 +70,12 @@ sub add_dep_after { $$string =~ s/($targ\s+::.*?$after_targ)/$1 $add/; } +my $build; + sub build_config { my $key = shift; require Apache2::Build; - my $build = Apache2::Build->build_config; + $build ||= Apache2::Build->build_config; return $build unless $key; $build->{$key}; } @@ -98,15 +100,14 @@ sub my_import { my @default_opts = qw(CCFLAGS LIBS INC OPTIMIZE LDDLFLAGS TYPEMAPS); my @default_dlib_opts = qw(OTHERLDFLAGS); my @default_macro_opts = (); -my $b = build_config(); my %opts = ( - CCFLAGS => sub { $b->{MODPERL_CCOPTS} }, - LIBS => sub { join ' ', $b->apache_libs, $b->modperl_libs }, - INC => sub { $b->inc; }, - OPTIMIZE => sub { $b->perl_config('optimize'); }, - LDDLFLAGS => sub { $b->perl_config('lddlflags'); }, - TYPEMAPS => sub { $b->typemaps; }, - OTHERLDFLAGS => sub { $b->otherldflags; }, + CCFLAGS => sub { $build->{MODPERL_CCOPTS} }, + LIBS => sub { join ' ', $build->apache_libs, $build->modperl_libs }, + INC => sub { $build->inc; }, + OPTIMIZE => sub { $build->perl_config('optimize'); }, + LDDLFLAGS => sub { $build->perl_config('lddlflags'); }, + TYPEMAPS => sub { $build->typemaps; }, + OTHERLDFLAGS => sub { $build->otherldflags; }, ); sub get_def_opt { @@ -129,7 +130,7 @@ sub WriteMakefile { $eu_mm_mv_all_methods_overriden++; } - my $build = build_config(); + $build ||= build_config(); my_import(__PACKAGE__); # set top-level WriteMakefile's values if weren't set already @@ -159,7 +160,7 @@ sub WriteMakefile { sub ModPerl::MM::MY::post_initialize { my $self = shift; - my $build = build_config(); + $build ||= build_config(); my $pm = $self->{PM}; while (my ($k, $v) = each %PM) { Modified: perl/modperl/branches/threading/src/modules/perl/modperl_const.c URL: http://svn.apache.org/viewvc/perl/modperl/branches/threading/src/modules/perl/modperl_const.c?rev=1244196&r1=1244195&r2=1244196&view=diff ============================================================================== --- perl/modperl/branches/threading/src/modules/perl/modperl_const.c (original) +++ perl/modperl/branches/threading/src/modules/perl/modperl_const.c Tue Feb 14 20:09:12 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/branches/threading/src/modules/perl/modperl_perl.c URL: http://svn.apache.org/viewvc/perl/modperl/branches/threading/src/modules/perl/modperl_perl.c?rev=1244196&r1=1244195&r2=1244196&view=diff ============================================================================== --- perl/modperl/branches/threading/src/modules/perl/modperl_perl.c (original) +++ perl/modperl/branches/threading/src/modules/perl/modperl_perl.c Tue Feb 14 20:09:12 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++; }