Stas Bekman <[EMAIL PROTECTED]> writes:
> Joe Schaefer wrote:
> > Stas Bekman <[EMAIL PROTECTED]> writes:
> > [...]
> >
> >>Joe, this still needs to applied? But please make sure that you
> >>restore the context when you are done with it. Look at the other
> >>places where this is done (grep for SET_CONTEXT).
> > AFAICT the only place where the context is "localized" is in modperl_cmd.c:
> > #define MP_PERL_DECLARE_CONTEXT \
> > PerlInterpreter *orig_perl; \
> > pTHX;
> > /* XXX: .htaccess support cannot use this perl with threaded MPMs */
> > #define MP_PERL_OVERRIDE_CONTEXT \
> > orig_perl = PERL_GET_CONTEXT; \
> > aTHX = scfg->mip->parent->perl; \
> > PERL_SET_CONTEXT(aTHX);
> > #define MP_PERL_RESTORE_CONTEXT \
> > PERL_SET_CONTEXT(orig_perl);
> > Is that what you have in mind here?
>
> Exactly.
Here's the patch- unfortunately it doesn't quite work...
I get a similar segfault when the perl handler runs
(this patch only affects modperl_module_config_merge).
Index: src/modules/perl/modperl_module.c
===================================================================
RCS file: /home/cvs/modperl-2.0/src/modules/perl/modperl_module.c,v
retrieving revision 1.17
diff -u -r1.17 modperl_module.c
--- src/modules/perl/modperl_module.c 4 Mar 2004 06:01:07 -0000 1.17
+++ src/modules/perl/modperl_module.c 7 Oct 2004 18:50:57 -0000
@@ -169,6 +169,7 @@
#ifdef USE_ITHREADS
modperl_interp_t *interp;
dTHX;
+ PerlInterpreter *orig_perl = aTHX;
#endif
/* if the module is loaded in vhost, base==NULL */
@@ -185,6 +186,7 @@
#ifdef USE_ITHREADS
interp = modperl_interp_pool_select(p, s);
aTHX = interp->perl;
+ PERL_SET_CONTEXT(aTHX);
#endif
table = modperl_module_config_table_get(aTHX_ TRUE);
@@ -239,7 +241,7 @@
if (!is_startup) {
modperl_module_config_obj_cleanup_register(aTHX_ p, table, mrg);
}
-
+ PERL_SET_CONTEXT(orig_perl);
return (void *)mrg;
}
~>
Program received signal SIGSEGV, Segmentation fault.
[Switching to Thread 1099901296 (LWP 5305)]
0x0000002a967c286d in Perl_safesysmalloc (size=96) at util.c:75
(gdb) up
#1 0x0000002a967f01d7 in Perl_sv_upgrade (my_perl=0x14204c0, sv=0x1490250, mt=13)
at sv.c:1506
(gdb)
#2 0x0000002a96764286 in Perl_gv_init (my_perl=0x14204c0, gv=0x1490250,
stash=0x2fa2720, name=0x2a968b2e45 "DESTROY", len=7, multi=1) at gv.c:112
(gdb) #3 0x0000002a96764807 in Perl_gv_fetchmeth (my_perl=0x14204c0, stash=0x2fa2720,
name=0x2a968b2e45 "DESTROY", len=7, level=0) at gv.c:225
(gdb)
#4 0x0000002a96764e47 in Perl_gv_fetchmeth_autoload (my_perl=0x14204c0,
stash=0x2fa2720, name=0x2a968b2e45 "DESTROY", len=7, level=0) at gv.c:338
(gdb)
#5 0x0000002a967681db in Perl_Gv_AMupdate (my_perl=0x14204c0, stash=0x2fa2720)
at gv.c:1363
(gdb)
#6 0x0000002a96801108 in Perl_sv_bless (my_perl=0x14204c0, sv=0x1490230,
stash=0x2fa2720) at sv.c:7894
(gdb)
#7 0x0000002a96800e34 in Perl_newSVrv (my_perl=0x14204c0, rv=0x1490230,
classname=0x2a96615908 "Apache::RequestRec") at sv.c:7748
(gdb)
#8 0x0000002a96800ea6 in Perl_sv_setref_pv (my_perl=0x14204c0, rv=0x1490230,
classname=0x2a96615908 "Apache::RequestRec", pv=0x274a6a8) at sv.c:7779
(gdb)
#9 0x0000002a965f9576 in modperl_ptr2obj (my_perl=0x14204c0,
classname=0x2a96615908 "Apache::RequestRec", ptr=0x274a6a8)
at modperl_util.c:192
(gdb)
#10 0x0000002a965f7d99 in modperl_handler_make_args (my_perl=0x14204c0,
avp=0x418f2158) at modperl_handler.c:238
(gdb)
#11 0x0000002a965f6c23 in modperl_callback_run_handlers (idx=6, type=4,
r=0x274a6a8, c=0x0, s=0x5a0b80, pconf=0x0, plog=0x0, ptemp=0x0,
run_mode=MP_HOOK_RUN_FIRST) at modperl_callback.c:237
--
Joe Schaefer
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]