gozer 2004/10/14 11:25:01
Modified: . Changes src/modules/perl modperl_util.c Log: Replace Perl_load_module() with a simpler eval "use Module version ()" to work around what seems to be a potential bug in Perl_load_module() Was causing segfaults with worker MPM. PR: http://marc.theaimsgroup.com/?t=109684579900001&r=1&w=2 Revision Changes Path 1.512 +2 -0 modperl-2.0/Changes Index: Changes =================================================================== RCS file: /home/cvs/modperl-2.0/Changes,v retrieving revision 1.511 retrieving revision 1.512 diff -u -r1.511 -r1.512 --- Changes 11 Oct 2004 23:10:57 -0000 1.511 +++ Changes 14 Oct 2004 18:25:01 -0000 1.512 @@ -12,6 +12,8 @@ =item 1.99_17-dev +Workaround a possible bug in Perl_load_module() [Gozer] + Fix a problem building with non-GNU make (can't make target dynamic in xs/APR/aprext) [Gozer] 1.84 +23 -3 modperl-2.0/src/modules/perl/modperl_util.c Index: modperl_util.c =================================================================== RCS file: /home/cvs/modperl-2.0/src/modules/perl/modperl_util.c,v retrieving revision 1.83 retrieving revision 1.84 diff -u -r1.83 -r1.84 --- modperl_util.c 16 Sep 2004 16:36:29 -0000 1.83 +++ modperl_util.c 14 Oct 2004 18:25:01 -0000 1.84 @@ -705,16 +705,36 @@ dSP; int count; SV *bdeparse; + SV *use; char *text; + int tainted_orig; /* B::Deparse >= 0.61 needed for blessed code references. * 0.6 works fine for non-blessed code refs. * notice that B::Deparse is not CPAN-updatable. * 0.61 is available starting from 5.8.0 */ - Perl_load_module(aTHX_ PERL_LOADMOD_NOIMPORT, - newSVpvn("B::Deparse", 10), - newSVnv(SvOBJECT((SV*)cv) ? 0.61 : 0.60)); + + /* + Perl_load_module(aTHX_ PERL_LOADMOD_NOIMPORT, + newSVpvn("B::Deparse", 10), + newSVnv(SvOBJECT((SV*)cv) ? 0.61 : 0.60)); + * Perl_load_module() was causing segfaults in the worker MPM. + * this is a work around until we can find the problem with + * Perl_load_module() + * See: http://marc.theaimsgroup.com/?t=109684579900001&r=1&w=2 + */ + use = newSVpv("use B::Deparse ", 15); + if (SvOBJECT((SV*)cv)) { + sv_catpvn(use, "0.61", 3); + } + sv_catpvn(use, " ();", 4); + + tainted_orig = PL_tainted; + TAINT_NOT; + eval_sv(use, G_DISCARD); + PL_tainted = tainted_orig; + sv_free(use); ENTER; SAVETMPS;