Author: stas
Date: Fri May 20 16:01:03 2005
New Revision: 171168
URL: http://svn.apache.org/viewcvs?rev=171168&view=rev
Log:
Fix a bug in custom directive implementation, where a custom directive
placed into a dir container was causing a global perl context change
which was leading to a segfault in any handler called
thereafter.
Added:
perl/modperl/trunk/t/response/TestDirective/perlloadmodule7.pm (with
props)
Modified:
perl/modperl/trunk/Changes
perl/modperl/trunk/src/modules/perl/modperl_module.c
perl/modperl/trunk/t/directive/ (props changed)
Modified: perl/modperl/trunk/Changes
URL:
http://svn.apache.org/viewcvs/perl/modperl/trunk/Changes?rev=171168&r1=171167&r2=171168&view=diff
==============================================================================
--- perl/modperl/trunk/Changes (original)
+++ perl/modperl/trunk/Changes Fri May 20 16:01:03 2005
@@ -12,6 +12,11 @@
=item 2.0.1-dev
+Fix a bug in custom directive implementation, where a custom directive
+placed into a dir container was causing a global perl context change
+which was leading to a segfault in any handler called
+thereafter. [Stas]
+
=item 2.0.0 - May 20, 2005
Modified: perl/modperl/trunk/src/modules/perl/modperl_module.c
URL:
http://svn.apache.org/viewcvs/perl/modperl/trunk/src/modules/perl/modperl_module.c?rev=171168&r1=171167&r2=171168&view=diff
==============================================================================
--- perl/modperl/trunk/src/modules/perl/modperl_module.c (original)
+++ perl/modperl/trunk/src/modules/perl/modperl_module.c Fri May 20 16:01:03
2005
@@ -165,10 +165,9 @@
int is_startup;
PTR_TBL_t *table;
SV *mrg_obj = Nullsv, *base_obj, *add_obj;
-
#ifdef USE_ITHREADS
+ MP_PERL_CONTEXT_DECLARE;
modperl_interp_t *interp;
- pTHX;
#endif
/* if the module is loaded in vhost, base==NULL */
@@ -184,7 +183,7 @@
#ifdef USE_ITHREADS
interp = modperl_interp_pool_select(p, s);
- aTHX = interp->perl;
+ MP_PERL_CONTEXT_STORE_OVERRIDE(interp->perl);
#endif
table = modperl_module_config_table_get(aTHX_ TRUE);
@@ -240,6 +239,11 @@
modperl_module_config_obj_cleanup_register(aTHX_ p, table, mrg);
}
+#ifdef USE_ITHREADS
+ modperl_interp_unselect(interp);
+ MP_PERL_CONTEXT_RESTORE;
+#endif
+
return (void *)mrg;
}
Propchange: perl/modperl/trunk/t/directive/
------------------------------------------------------------------------------
--- svn:ignore (original)
+++ svn:ignore Fri May 20 16:01:03 2005
@@ -1,5 +1,6 @@
cmdparms.t
env.t
perlloadmodule.t
+perlloadmodule7.t
pod.t
perldo.t
Added: perl/modperl/trunk/t/response/TestDirective/perlloadmodule7.pm
URL:
http://svn.apache.org/viewcvs/perl/modperl/trunk/t/response/TestDirective/perlloadmodule7.pm?rev=171168&view=auto
==============================================================================
--- perl/modperl/trunk/t/response/TestDirective/perlloadmodule7.pm (added)
+++ perl/modperl/trunk/t/response/TestDirective/perlloadmodule7.pm Fri May 20
16:01:03 2005
@@ -0,0 +1,56 @@
+package TestDirective::perlloadmodule7;
+
+# in this test we test an early mod_perl startup caused by an
+# EXEC_ON_READ directive in vhost.
+
+use strict;
+use warnings FATAL => 'all';
+
+use Apache2::Module ();
+
+use Apache2::Const -compile => qw(OK);
+
+use constant KEY => "MyTest7";
+
+my @directives = ({ name => +KEY },);
+
+Apache2::Module::add(__PACKAGE__, [EMAIL PROTECTED]);
+
+sub MyTest7 {
+ my($self, $parms, $arg) = @_;
+ $self->{+KEY} = $arg;
+}
+
+### response handler ###
+
+use Apache2::RequestRec ();
+use Apache2::RequestIO ();
+
+use Apache::Test;
+use Apache::TestUtil;
+
+use Apache2::Const -compile => qw(OK);
+
+sub handler {
+ my($r) = @_;
+
+ plan $r, tests => 1;
+
+ ok 1;
+
+ return Apache2::Const::OK;
+}
+
+1;
+__END__
+
+<NoAutoConfig>
+# APACHE_TEST_CONFIG_ORDER 950
+PerlLoadModule TestDirective::perlloadmodule7
+
+<Location /TestDirective__perlloadmodule7>
+ MyTest7 test
+ SetHandler modperl
+ PerlResponseHandler TestDirective::perlloadmodule7
+</Location>
+</NoAutoConfig>
Propchange: perl/modperl/trunk/t/response/TestDirective/perlloadmodule7.pm
------------------------------------------------------------------------------
svn:eol-style = native