Stas Bekman wrote:
Steve Hay wrote:

At least I have found a sure way to verify that a segfault is caused by the wrong context. When you get a core trace where a Perl_ call, passing interpreter argument (my_perl on Unix, interpreter on win32), is followed by another Perl_ call, which doesn't pass this argument, go that that frame with the latter call and issue

(gdb) p PL_curinterp

if it doesn't match the interpreter (or my_perl) argument from the call one frame higher, you know what the problem is.

Actually it's not necessarily true. Since interpreter/my_perl could be a perl from the pool, and PL_curinterp is always a parent perl. So you also need the trace to see what pointer the parent pool has.


The opposite is true. If you get the same pointer for PL_curinterp and interpreter/my_perl, then the issue is elsewhere.

In your trace:

VMem::Free(void * 0x00acea1c) line 208 + 3 bytes
CPerlHost::Free(void * 0x00acea1c) line 59 + 34 bytes
PerlMemFree(IPerlMem * 0x00262434, void * 0x00acea1c) line 302
Perl_safesysfree(void * 0x00acea1c) line 143 + 26 bytes


(gdb) p PL_curinterp

Perl_sv_clear(interpreter * 0x012aff6c, sv * 0x013a1b3c) line 5198 + 13 bytes


(gdb) up
(gdb) p interpreter

if the two are not the same, the problem is clear.

PL_curinterp is a true global variable, so it's impossible to maintain it per interpreter.

The next step is to figure out how to set the perl context every time we select a new interepreter without incurring too much overhead and encapsulate this function together with the selector code so not to clutter the code and prevent forgetting to set the context in the newly added code. I will keep you posted.


__________________________________________________________________
Stas Bekman            JAm_pH ------> Just Another mod_perl Hacker
http://stason.org/     mod_perl Guide ---> http://perl.apache.org
mailto:[EMAIL PROTECTED] http://use.perl.org http://apacheweek.com
http://modperlbook.org http://apache.org   http://ticketmaster.com


--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]



Reply via email to