
perlbug-followup at perl
Apr 8, 2012, 2:07 PM
Post #4 of 17
(189 views)
Permalink
|
|
[perl #109718] fork.t fails on Win32 since v5.15.4-465-g676a678
[In reply to]
|
|
On Sun Apr 08 13:17:36 2012, bulk88 wrote: comppad isn't found in the pointer table, this returns null in 5.15 http://perl5.git.perl.org/perl.git/blob/03d9f026ae253e9e69212a3cf6f1944437e9f070:/sv.c#l11551 In 5.12, curpad is added with the following callstack. ___________________________________________________________ perl512.dll!Perl_ptr_table_store(interpreter * my_perl=0x008368b4, ptr_tbl * const tbl=0x00838ec4, const void * const oldsv=0x0082b35c, void * const newsv=0x0084e564) Line 10799 C perl512.dll!Perl_sv_dup(interpreter * my_perl=0x008368b4, const sv * const sstr=0x0082b35c, clone_params * const param=0x0006fa48) Line 10999 + 0x1b C perl512.dll!S_sv_dup_inc_multiple(interpreter * my_perl=0x008368b4, sv * const * source=0x0082d3f0, sv * * dest=0x0085a9b8, int items=0, clone_params * const param=0x0006fa48) Line 10948 + 0x19 C perl512.dll!Perl_sv_dup(interpreter * my_perl=0x008368b4, const sv * const sstr=0x00397e9c, clone_params * const param=0x0006fa48) Line 11191 + 0x19 C perl512.dll!Perl_sv_dup(interpreter * my_perl=0x008368b4, const sv * const sstr=0x00397e6c, clone_params * const param=0x0006fa48) Line 11284 + 0x57 C > perl512.dll!perl_clone_using(interpreter * proto_perl=0x00394194, unsigned long flags=1, IPerlMem * ipM=0x00286074, IPerlMem * ipMS=0x00286090, IPerlMem * ipMP=0x002860ac, IPerlEnv * ipE=0x002860c8, IPerlStdIO * ipStd=0x00286100, IPerlLIO * ipLIO=0x0028619c, IPerlDir * ipD=0x00286204, IPerlSock * ipS=0x00286230, IPerlProc * ipP=0x002862e0) Line 12230 + 0x17 C perl512.dll!PerlProcFork(IPerlProc * piPerl=0x00285eb0) Line 1859 + 0x65 C++ perl512.dll!Perl_pp_fork(interpreter * my_perl=0x00394194) Line 4082 + 0x16 C perl512.dll!Perl_runops_debug(interpreter * my_perl=0x00394194) Line 2049 + 0xd C perl512.dll!S_run_body(interpreter * my_perl=0x00394194, long oldscope=1) Line 2308 + 0xd C perl512.dll!perl_run(interpreter * my_perl=0x00394194) Line 2233 + 0xd C perl512.dll!RunPerl(int argc=3, char * * argv=0x00282478, char * * env=0x00285148) Line 270 + 0x9 C++ perl.exe!main(int argc=3, char * * argv=0x00282478, char * * env=0x00282d68) Line 23 + 0x12 C perl.exe!mainCRTStartup() Line 398 + 0xe C kernel32.dll!_BaseProcessStart@4() + 0x23 _______________________________________________________________ In 5.12, the line that triggered the cloning is http://perl5.git.perl.org/perl.git/blob/03d9f026ae253e9e69212a3cf6f1944437e9f070:/sv.c#l13282 " PL_compcv = cv_dup(proto_perl->Icompcv, param);". Somewhere between 5.12 and 5.15, sv_dup was gutted and turned into sv_dup_common. At this point, http://perl5.git.perl.org/perl.git/blob/03d9f026ae253e9e69212a3cf6f1944437e9f070:/sv.c#l13282 , in 5.12 compcv of parent interp is non-null, in 5.15 compcv of parent interp is null. Therefore it wont get cloned into the "pointer table". On entry to perl_clone_using at http://perl5.git.perl.org/perl.git/blob/03d9f026ae253e9e69212a3cf6f1944437e9f070:/sv.c#l12779 , in 5.12, parent interp has non-null compcv. In 5.15, in parent interp has null compcv. On entry to pp_fork at http://perl5.git.perl.org/perl.git/blob/03d9f026ae253e9e69212a3cf6f1944437e9f070:/pp_sys.c#l3980 in 5.12 compcv in my_perl/parent interp is non null, in 5.15 it is null. This is now an opcode problem. _____________________________________________ perl512.dll!Perl_pp_fork(interpreter * my_perl=0x00394194) Line 4049 C perl512.dll!Perl_runops_debug(interpreter * my_perl=0x00394194) Line 2049 + 0xd C perl512.dll!S_run_body(interpreter * my_perl=0x00394194, long oldscope=1) Line 2308 + 0xd C perl512.dll!perl_run(interpreter * my_perl=0x00394194) Line 2233 + 0xd C perl512.dll!RunPerl(int argc=3, char * * argv=0x00282478, char * * env=0x00285148) Line 270 + 0x9 C++ perl.exe!main(int argc=3, char * * argv=0x00282478, char * * env=0x00282d68) Line 23 + 0x12 C perl.exe!mainCRTStartup() Line 398 + 0xe C > kernel32.dll!_BaseProcessStart@4() + 0x23 _________________________________________________ > perl515.dll!Perl_pp_fork(interpreter * my_perl=0x00384194) Line 4035 C perl515.dll!Perl_runops_debug(interpreter * my_perl=0x00384194) Line 2119 + 0xd C perl515.dll!S_run_body(interpreter * my_perl=0x00384194, long oldscope=1) Line 2400 + 0xd C perl515.dll!perl_run(interpreter * my_perl=0x00384194) Line 2318 + 0xd C perl515.dll!RunPerl(int argc=3, char * * argv=0x00342478, char * * env=0x00345148) Line 270 + 0x9 C++ perl.exe!main(int argc=3, char * * argv=0x00342478, char * * env=0x00342d68) Line 23 + 0x12 C perl.exe!mainCRTStartup() Line 398 + 0xe C kernel32.dll!_BaseProcessStart@4() + 0x23 ___________________________________________________ --- via perlbug: queue: perl5 status: open https://rt.perl.org:443/rt3/Ticket/Display.html?id=109718
|