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


Reply via email to