Skip Menu |
Report information
Id: 133009
Status: open
Priority: 0/
Queue: perl5

Owner: Nobody
Requestors: chorny <alexchorny [at] gmail.com>
Cc:
AdminCc:

Operating System: mswin32
PatchStatus: (no value)
Severity: low
Type: library
Perl Version: 5.14.0
Fixed In: (no value)



To: perlbug [...] perl.org
Subject: stacksize in Storable failure on Windows XP
Date: Wed, 21 Mar 2018 16:41:25 +0200
From: Alexandr Ciornii <alexchorny [...] gmail.com>
Download (untitled) / with headers
text/plain 3.7k
This is a bug report for perl from alexchorny@gmail.com, generated with the help of perlbug 1.39 running under perl 5.14.0. ----------------------------------------------------------------- [Please describe your issue here] perl 5.27.10. In case of Windows XP write_limits is called before directory change and creation. "..\..\perl.exe" "-I..\..\lib" "-I..\..\lib" stacksize --core lib/Storable/Limit.pm No such file or directory at stacksize line 207. Using defaults for older Win32 gmake[1]: *** [Makefile:284: lib\Storable\Limit.pm] Error 2 gmake[1]: Leaving directory 'C:/strawberry_build/build/perl_core/perl-5.27.10/dist/Storable' gmake: *** [GNUmakefile:1605: ..\lib\Storable\Limit.pm] Error 2 [Please do not change anything below this line] ----------------------------------------------------------------- --- Flags: category=library severity=low module=Storable --- Site configuration information for perl 5.14.0: Configured by 1 at Thu Jun 9 02:04:07 2011. Summary of my perl5 (revision 5 version 14 subversion 0) configuration: Platform: osname=MSWin32, osvers=4.0, archname=MSWin32-x86-multi-thread uname='Win32 strawberryperl 5.14.0.0.beta_1 #1 Thu Jun 9 01:53:47 2011 i386' config_args='undef' hint=recommended, useposix=true, d_sigaction=undef useithreads=define, usemultiplicity=define useperlio=define, d_sfio=undef, uselargefiles=define, usesocks=undef use64bitint=undef, use64bitall=undef, uselongdouble=undef usemymalloc=n, bincompat5005=undef Compiler: cc='gcc', ccflags =' -s -O2 -DWIN32 -DPERL_TEXTMODE_SCRIPTS -DUSE_SITECUSTOMIZE -DPERL_IMPLICIT_CONTEXT -DPERL_IMPLICIT_SYS -fno-strict-aliasing -mms-bitfields', optimize='-s -O2', cppflags='-DWIN32' ccversion='', gccversion='4.4.3', gccosandvers='' intsize=4, longsize=4, ptrsize=4, doublesize=8, byteorder=1234 d_longlong=undef, longlongsize=8, d_longdbl=define, longdblsize=12 ivtype='long', ivsize=4, nvtype='double', nvsize=8, Off_t='long long', lseeksize=8 alignbytes=8, prototype=define Linker and Libraries: ld='g++', ldflags ='-s -L"C:\strawberry514\perl\lib\CORE" -L"C:\strawberry514\c\lib"' libpth=C:\strawberry514\c\lib C:\strawberry514\c\i686-w64-mingw32\lib libs=-lmoldname -lkernel32 -luser32 -lgdi32 -lwinspool -lcomdlg32 -ladvapi32 -lshell32 -lole32 -loleaut32 -lnetapi32 -luuid -lws2_32 -lmpr -lwinmm -lversion -lodbc32 -lodbccp32 -lcomctl32 perllibs=-lmoldname -lkernel32 -luser32 -lgdi32 -lwinspool -lcomdlg32 -ladvapi32 -lshell32 -lole32 -loleaut32 -lnetapi32 -luuid -lws2_32 -lmpr -lwinmm -lversion -lodbc32 -lodbccp32 -lcomctl32 libc=, so=dll, useshrplib=true, libperl=libperl514.a gnulibc_version='' Dynamic Linking: dlsrc=dl_win32.xs, dlext=dll, d_dlsymun=undef, ccdlflags=' ' cccdlflags=' ', lddlflags='-mdll -s -L"C:\strawberry514\perl\lib\CORE" -L"C:\strawberry514\c\lib"' Locally applied patches: --- @INC for perl 5.14.0: C:/strawberry514/perl/site/lib/MSWin32-x86-multi-thread C:/strawberry514/perl/site/lib C:/strawberry514/perl/vendor/lib C:/strawberry514/perl/lib . --- Environment for perl 5.14.0: HOME (unset) LANG (unset) LANGUAGE (unset) LD_LIBRARY_PATH (unset) LOGDIR (unset) PATH=C:\Program Files\Far\;C:\Prg\PHP\;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\Program Files\ATI Technologies\ATI.ACE\Core-Static;C:\strawberry514\c\bin;C:\strawberry514\perl\site\bin;C:\strawberry514\perl\bin;C:\Program Files\TortoiseHg\;C:\Program Files\MySQL\MySQL Server 5.5\bin;c:\util\;C:\Prg\Subversion\bin;C:\Program Files\TortoiseSVN\bin;D:\vagrant\vagrant\bin;C:\Program Files\Skype\Phone\;d:\Prg\Git\cmd;C:\Prg\TortoiseGit\bin; PERL_BADLANG (unset) PERL_JSON_BACKEND=JSON::XS PERL_YAML_BACKEND=YAML SHELL (unset) -- Alexandr Ciornii, http://chorny.net
RT-Send-CC: perl5-porters [...] perl.org
Download (untitled) / with headers
text/plain 605b
On Wed, 21 Mar 2018 07:41:57 -0700, chorny wrote: Show quoted text
> perl 5.27.10. > In case of Windows XP write_limits is called before directory change > and creation. > > "..\..\perl.exe" "-I..\..\lib" "-I..\..\lib" stacksize --core > lib/Storable/Limit.pm No such file or directory at stacksize line 207. > Using defaults for older Win32 > gmake[1]: *** [Makefile:284: lib\Storable\Limit.pm] Error 2 > gmake[1]: Leaving directory > 'C:/strawberry_build/build/perl_core/perl-5.27.10/dist/Storable' > gmake: *** [GNUmakefile:1605: ..\lib\Storable\Limit.pm] Error 2
Please let me if the attached fixes it. Thanks, Tony
Subject: 0001-perl-133009-handle-the-XP-fallback-after-we-re-ready.patch
From 0e39a28e5e7b97d5b25485ea1156439a275573a4 Mon Sep 17 00:00:00 2001 From: Tony Cook <tony@develop-help.com> Date: Thu, 22 Mar 2018 11:48:29 +1100 Subject: (perl #133009) handle the XP fallback after we're ready to write --- dist/Storable/stacksize | 16 +++++++++------- win32/GNUmakefile | 5 +++-- win32/makefile.mk | 5 +++-- 3 files changed, 15 insertions(+), 11 deletions(-) diff --git a/dist/Storable/stacksize b/dist/Storable/stacksize index 54cd947c53..bb768f73e0 100644 --- a/dist/Storable/stacksize +++ b/dist/Storable/stacksize @@ -33,13 +33,6 @@ if (is_miniperl()) { } my $prefix = ""; if ($^O eq "MSWin32") { - require Win32; - my ($str, $major, $minor) = Win32::GetOSVersion(); - if ($major < 6 || $major == 6 && $minor < 1) { - print "Using defaults for older Win32\n"; - write_limits(500, 256); - exit; - } # prevent Windows popping up a dialog each time we overflow # the stack require Win32API::File; @@ -78,6 +71,15 @@ if ($ENV{PERL_CORE}) { -d "lib" or mkdir "lib"; -d "lib/Storable" or mkdir "lib/Storable"; +if ($^O eq "MSWin32") { + require Win32; + my ($str, $major, $minor) = Win32::GetOSVersion(); + if ($major < 6 || $major == 6 && $minor < 1) { + print "Using defaults for older Win32\n"; + write_limits(500, 256); + exit; + } +} my ($n, $good, $bad, $found) = (65000, 100, $bad1, undef); print "probe for max. stack sizes...\n" unless QUIET; diff --git a/win32/GNUmakefile b/win32/GNUmakefile index 7e464fa3cb..3f7bd2fed3 100644 --- a/win32/GNUmakefile +++ b/win32/GNUmakefile @@ -1600,8 +1600,9 @@ Extensions_realclean : PostExt : ..\lib\Storable\Limit.pm # we need the exe, perl(ver).dll, and the Exporter, Storable, Win32 extensions -# rebasePE covers just about that, including adjustment for static builds -..\lib\Storable\Limit.pm : rebasePE +# rebasePE most of that, including adjustment for static builds, so we +# just need non-xs extensions +..\lib\Storable\Limit.pm : rebasePE Extensions_nonxs $(PLMAKE) -C ..\dist\Storable lib\Storable\Limit.pm if not exist ..\lib\Storable mkdir ..\lib\Storable copy ..\dist\Storable\lib\Storable\Limit.pm ..\lib\Storable\Limit.pm diff --git a/win32/makefile.mk b/win32/makefile.mk index 80bd6e8544..d7b007846a 100644 --- a/win32/makefile.mk +++ b/win32/makefile.mk @@ -1552,8 +1552,9 @@ PostExt : ..\lib\Storable\Limit.pm $(NOOP) # we need the exe, perl(ver).dll, and the Exporter, Storable, Win32 extensions -# rebasePE covers just about that, including adjustment for static builds -..\lib\Storable\Limit.pm : rebasePE +# rebasePE most of that, including adjustment for static builds, so we +# just need non-xs extensions +..\lib\Storable\Limit.pm : rebasePE Extensions_nonxs cd ..\dist\Storable && $(MAKE) lib\Storable\Limit.pm if not exist ..\lib\Storable mkdir ..\lib\Storable copy ..\dist\Storable\lib\Storable\Limit.pm ..\lib\Storable\Limit.pm -- 2.14.1.windows.1
RT-Send-CC: perl5-porters [...] perl.org
Download (untitled) / with headers
text/plain 5.5k
On Wed, 21 Mar 2018 20:51:43 -0700, tonyc wrote: Show quoted text
> On Wed, 21 Mar 2018 07:41:57 -0700, chorny wrote:
> > perl 5.27.10. > > In case of Windows XP write_limits is called before directory change > > and creation. > > > > "..\..\perl.exe" "-I..\..\lib" "-I..\..\lib" stacksize --core > > lib/Storable/Limit.pm No such file or directory at stacksize line 207. > > Using defaults for older Win32 > > gmake[1]: *** [Makefile:284: lib\Storable\Limit.pm] Error 2 > > gmake[1]: Leaving directory > > 'C:/strawberry_build/build/perl_core/perl-5.27.10/dist/Storable' > > gmake: *** [GNUmakefile:1605: ..\lib\Storable\Limit.pm] Error 2
> > Please let me if the attached fixes it. > > Thanks, > Tony
I didn't test your patch, but I came to same conclusion, stacksize.pl needs either Extensions_nonxs target as a dep, or an alternative thing I tried but it got murky and I abandoned the idea was executing buildcustomize.pl inside a full perl process, but XSLoader which Win32API::File or Cwd:: use, can't just be @INC buildcustomize.pl included, it is a generated .pm, not copied .pm. So that would mean moving XSLoader from Extensions_nonxs target to Dynaloader target, and I gave up at that point due to complexity. The reason this was misdiagnosed was stacksize.pl doesn't separate OS errors (SEGV) from perl errors, like this one (Extensions_nonxs target not yet built). -------------------------------- C:\perl521\src\dist\Storable>C:\perl521\src\perl.exe -I..\..\lib\auto -I..\..\li b -MStorable=dclone -e"my $t; $Storable::recursion_limit = -1; $t=[$t] for 1..65 000;dclone($t);" Can't locate Carp.pm in @INC (you may need to install the Carp module) (@INC con tains: ..\..\lib\auto ..\..\lib C:/perl521/src/lib) at ..\..\lib/Storable.pm lin e 57. BEGIN failed--compilation aborted at ..\..\lib/Storable.pm line 68. Compilation failed in require. BEGIN failed--compilation aborted. C:\perl521\src\dist\Storable> -------------------------------- Another problem, I didn't fully diagnose it but ------------------------------------ C:\perl521\src\dist\Storable>gmake lib\Storable\Limit.pm C:\perl521\src\miniperl.exe "-I..\..\lib" -MExtUtils::Command -e mkpath -- ..\.. \lib "..\..\perl.exe" "-I..\..\lib" "-I..\..\lib" stacksize probe for max. stack sizes... Storable: determining recursion limit: 65000 too big, try less 32550 ... Storable: determining recursion limit: 32550 too big, try less 16325 ... Storable: determining recursion limit: 16325 too big, try less 8213 ... Storable: determining recursion limit: 8213 too big, try less 4157 ... Storable: determining recursion limit: 4157 too big, try less 2129 ... Storable: determining recursion limit: 2129 too big, try less 1115 ... Storable: determining recursion limit: 1115 too big, try less 608 ... Storable: determining recursion limit: 608 too big, try less 354 ... Storable: determining recursion limit: 354 too big, try less 227 ... Storable: determining recursion limit: 227 too big, try less 164 ... Storable: determining recursion limit: 164 too big, try less 132 ... Storable: determining recursion limit: 132 too big, try less 116 ... Storable: determining recursion limit: 116 too big, try less 108 ... Storable: determining recursion limit: 108 too big, try less 104 ... Storable: determining recursion limit: 104 too big, try less 102 ... Storable: determining recursion limit: 102 too big, try less 101 ... Storable: determining recursion limit: 101 too big, try less 101 ... MAX_DEPTH = 100 Storable: determining recursion limit: 50 too big, try less 50 ... MAX_DEPTH_HASH = 50 C:\perl521\src\dist\Storable>set PERL_CORE=1 C:\perl521\src\dist\Storable>del lib\Storable\Limit.pm C:\perl521\src\dist\Storable>gmake lib\Storable\Limit.pm C:\perl521\src\miniperl.exe "-I..\..\lib" -MExtUtils::Command -e mkpath -- ..\.. \lib "..\..\perl.exe" "-I..\..\lib" "-I..\..\lib" stacksize probe for max. stack sizes... Storable: determining recursion limit: 65000 too big, try less 32550 ... Storable: determining recursion limit: 32550 too big, try less 16325 ... Storable: determining recursion limit: 16325 too big, try less 8213 ... Storable: determining recursion limit: 8213 too big, try less 4157 ... Storable: determining recursion limit: 4157 passed, try more 6185 ... Storable: determining recursion limit: 6185 passed, try more 7199 ... Storable: determining recursion limit: 7199 too big, try less 6692 ... Storable: determining recursion limit: 6692 passed, try more 6945 ... Storable: determining recursion limit: 6945 too big, try less 6819 ... Storable: determining recursion limit: 6819 too big, try less 6756 ... Storable: determining recursion limit: 6756 passed, try more 6787 ... Storable: determining recursion limit: 6787 passed, try more 6803 ... Storable: determining recursion limit: 6803 passed, try more 6811 ... Storable: determining recursion limit: 6811 passed, try more 6815 ... Storable: determining recursion limit: 6815 too big, try less 6813 ... Storable: determining recursion limit: 6813 passed, try more 6814 ... Storable: determining recursion limit: 6814 passed, try more 6814 ... MAX_DEPTH = 6814 Storable: determining recursion limit: 3000 passed, try more 3000 ... MAX_DEPTH_HASH = 3000 C:\perl521\src\dist\Storable> ------------------------------------ The code really isn't good at detecting build process bugs. If I poison the -e string to always die in sub cmd in stacksize.pl, stacksize.pl doesn't figure it out. Stacksize.pl should try at level 1 of depth, and that HAS to always pass or bail out totally and never generate Limit.pm. Not try downwards till it hits zero/one level. -- bulk88 ~ bulk88 at hotmail.com
RT-Send-CC: perl5-porters [...] perl.org
Download (untitled) / with headers
text/plain 3.6k
On Thu, 22 Mar 2018 15:44:46 -0700, bulk88 wrote: Show quoted text
> I didn't test your patch, but I came to same conclusion, stacksize.pl > needs either Extensions_nonxs target as a dep, or an alternative thing > I tried but it got murky and I abandoned the idea was executing > buildcustomize.pl inside a full perl process, but XSLoader which > Win32API::File or Cwd:: use, can't just be @INC buildcustomize.pl > included, it is a generated .pm, not copied .pm. So that would mean > moving XSLoader from Extensions_nonxs target to Dynaloader target, and > I gave up at that point due to complexity. > > The reason this was misdiagnosed was stacksize.pl doesn't separate OS > errors (SEGV) from perl errors, like this one (Extensions_nonxs target > not yet built).
Show quoted text
> -------------------------------- > C:\perl521\src\dist\Storable>C:\perl521\src\perl.exe -I..\..\lib\auto > -I..\..\li > b -MStorable=dclone -e"my $t; $Storable::recursion_limit = -1; $t=[$t] > for 1..65 > 000;dclone($t);" > Can't locate Carp.pm in @INC (you may need to install the Carp module) > (@INC con > tains: ..\..\lib\auto ..\..\lib C:/perl521/src/lib) at > ..\..\lib/Storable.pm lin > e 57. > BEGIN failed--compilation aborted at ..\..\lib/Storable.pm line 68. > Compilation failed in require. > BEGIN failed--compilation aborted. > > C:\perl521\src\dist\Storable> > --------------------------------
From my testing, stacksize itself failed to compile before I got to this point. Show quoted text
> > Another problem, I didn't fully diagnose it but > > ------------------------------------ > C:\perl521\src\dist\Storable>gmake lib\Storable\Limit.pm > C:\perl521\src\miniperl.exe "-I..\..\lib" -MExtUtils::Command -e > mkpath -- ..\.. > \lib > "..\..\perl.exe" "-I..\..\lib" "-I..\..\lib" stacksize > probe for max. stack sizes... > Storable: determining recursion limit: 65000 too big, try less 32550 > ... > Storable: determining recursion limit: 32550 too big, try less 16325 > ... > Storable: determining recursion limit: 16325 too big, try less 8213 > ... > Storable: determining recursion limit: 8213 too big, try less 4157 ... > Storable: determining recursion limit: 4157 too big, try less 2129 ... > Storable: determining recursion limit: 2129 too big, try less 1115 ... > Storable: determining recursion limit: 1115 too big, try less 608 ... > Storable: determining recursion limit: 608 too big, try less 354 ... > Storable: determining recursion limit: 354 too big, try less 227 ... > Storable: determining recursion limit: 227 too big, try less 164 ... > Storable: determining recursion limit: 164 too big, try less 132 ... > Storable: determining recursion limit: 132 too big, try less 116 ... > Storable: determining recursion limit: 116 too big, try less 108 ... > Storable: determining recursion limit: 108 too big, try less 104 ... > Storable: determining recursion limit: 104 too big, try less 102 ... > Storable: determining recursion limit: 102 too big, try less 101 ... > Storable: determining recursion limit: 101 too big, try less 101 ... > MAX_DEPTH = 100 > Storable: determining recursion limit: 50 too big, try less 50 ... > MAX_DEPTH_HASH = 50
I could see this happening if Storable itself (or Exporter, Carp) was unbuilt or broken. The extra test in the new patch should catch that and prevent stacksize "succeeding" erroneously. Show quoted text
> The code really isn't good at detecting build process bugs. If I > poison the -e string to always die in sub cmd in stacksize.pl, > stacksize.pl doesn't figure it out. Stacksize.pl should try at level 1 > of depth, and that HAS to always pass or bail out totally and never > generate Limit.pm. Not try downwards till it hits zero/one level.
I've attached an updated patch which does check that a minimal run works. Thanks. Tony
Subject: 0001-perl-133009-handle-the-XP-fallback-after-we-re-ready.patch
From df9f6b65223c421502325a2a09cea85eaabde469 Mon Sep 17 00:00:00 2001 From: Tony Cook <tony@develop-help.com> Date: Thu, 22 Mar 2018 11:48:29 +1100 Subject: [PATCH] (perl #133009) handle the XP fallback after we're ready to write Also, check we can use Storable before trying to probe recursion limits. --- dist/Storable/stacksize | 30 ++++++++++++++++++++++-------- win32/GNUmakefile | 5 +++-- win32/makefile.mk | 5 +++-- 3 files changed, 28 insertions(+), 12 deletions(-) diff --git a/dist/Storable/stacksize b/dist/Storable/stacksize index 54cd947c53..2d786b44d5 100644 --- a/dist/Storable/stacksize +++ b/dist/Storable/stacksize @@ -33,13 +33,6 @@ if (is_miniperl()) { } my $prefix = ""; if ($^O eq "MSWin32") { - require Win32; - my ($str, $major, $minor) = Win32::GetOSVersion(); - if ($major < 6 || $major == 6 && $minor < 1) { - print "Using defaults for older Win32\n"; - write_limits(500, 256); - exit; - } # prevent Windows popping up a dialog each time we overflow # the stack require Win32API::File; @@ -78,6 +71,15 @@ if ($ENV{PERL_CORE}) { -d "lib" or mkdir "lib"; -d "lib/Storable" or mkdir "lib/Storable"; +if ($^O eq "MSWin32") { + require Win32; + my ($str, $major, $minor) = Win32::GetOSVersion(); + if ($major < 6 || $major == 6 && $minor < 1) { + print "Using defaults for older Win32\n"; + write_limits(500, 256); + exit; + } +} my ($n, $good, $bad, $found) = (65000, 100, $bad1, undef); print "probe for max. stack sizes...\n" unless QUIET; @@ -131,12 +133,24 @@ sub bad { return $j; } +sub array_cmd { + my $depth = shift; + return cmd($depth, '$t=[$t]', 'recursion_limit'); +} + unless ($ENV{STORABLE_NOISY}) { # suppress Segmentation fault messages open STDERR, ">", File::Spec->devnull; } + +# first check we can successfully run with a minimum level +my $cmd = array_cmd(1); +if (system($cmd)) { + die "Cannot run probe, aborting...\n"; +} + while (!$found) { - my $cmd = cmd($n, '$t=[$t]', 'recursion_limit'); + my $cmd = array_cmd($n); #print "$cmd\n" unless $QUIET; if (system($cmd) == 0) { $n = good($n); diff --git a/win32/GNUmakefile b/win32/GNUmakefile index 7e464fa3cb..3f7bd2fed3 100644 --- a/win32/GNUmakefile +++ b/win32/GNUmakefile @@ -1600,8 +1600,9 @@ Extensions_realclean : PostExt : ..\lib\Storable\Limit.pm # we need the exe, perl(ver).dll, and the Exporter, Storable, Win32 extensions -# rebasePE covers just about that, including adjustment for static builds -..\lib\Storable\Limit.pm : rebasePE +# rebasePE most of that, including adjustment for static builds, so we +# just need non-xs extensions +..\lib\Storable\Limit.pm : rebasePE Extensions_nonxs $(PLMAKE) -C ..\dist\Storable lib\Storable\Limit.pm if not exist ..\lib\Storable mkdir ..\lib\Storable copy ..\dist\Storable\lib\Storable\Limit.pm ..\lib\Storable\Limit.pm diff --git a/win32/makefile.mk b/win32/makefile.mk index 80bd6e8544..d7b007846a 100644 --- a/win32/makefile.mk +++ b/win32/makefile.mk @@ -1552,8 +1552,9 @@ PostExt : ..\lib\Storable\Limit.pm $(NOOP) # we need the exe, perl(ver).dll, and the Exporter, Storable, Win32 extensions -# rebasePE covers just about that, including adjustment for static builds -..\lib\Storable\Limit.pm : rebasePE +# rebasePE most of that, including adjustment for static builds, so we +# just need non-xs extensions +..\lib\Storable\Limit.pm : rebasePE Extensions_nonxs cd ..\dist\Storable && $(MAKE) lib\Storable\Limit.pm if not exist ..\lib\Storable mkdir ..\lib\Storable copy ..\dist\Storable\lib\Storable\Limit.pm ..\lib\Storable\Limit.pm -- 2.14.1.windows.1
RT-Send-CC: perl5-porters [...] perl.org
Download (untitled) / with headers
text/plain 2.1k
On Mon, 26 Mar 2018 22:28:32 -0700, tonyc wrote: Show quoted text
> I could see this happening if Storable itself (or Exporter, Carp) was > unbuilt or broken. > > The extra test in the new patch should catch that and prevent > stacksize "succeeding" erroneously. >
> > The code really isn't good at detecting build process bugs. If I > > poison the -e string to always die in sub cmd in stacksize.pl, > > stacksize.pl doesn't figure it out. Stacksize.pl should try at level > > 1 > > of depth, and that HAS to always pass or bail out totally and never > > generate Limit.pm. Not try downwards till it hits zero/one level.
> > I've attached an updated patch which does check that a minimal run > works. > > Thanks. > > Tony
I tested this patch. There are 2 problems. First "die "Cannot run probe, aborting...\n";" is below "unless ($ENV{STORABLE_NOISY}) {", so that message "Cannot run probe, aborting...\n" will never be seen if it was written to the handle. The "Cannot run probe, aborting...\n" needs to execute before STDERR is silenced. Second, why is the test not done on <Win 7? I did read https://rt.perl.org/Ticket/Display.html?id=132893 but I removed the version check and it runs fine for me on XP and server 2003 64b, VC and Mingw included. I did through experimenting find out, if I remove the set_error_mode popup suppression code, then as intended the VS "JIT debugger" popup comes up, if I click "No" in the box, the crashed perl process's exit code is 0 according to procmon, and stacksize.pl gets a 0 also, and sets the recursion limit to 65000 or 64999 since each run always "passes". If I click yes, then detach the process from VS debugger, the exit code of the process is 128. If set_error_mode() popup suppression is on (VS debugger didnt popup) the exit code of the proc is 0xc00000fd which is reasonable/expected. This shows, its undefined behavior to assume a crash proc's exit code is non-zero on all OSes. A "im alive" print after "dclone(\$t);" and switching from system to `` might be needed to prove the proc didnt crash. Exit code is just a 99% guarantee. I dont know why chorny's box hung. He never gave enough details. JIT Debugger popup he didn't see? (proc explorer provable). -- bulk88 ~ bulk88 at hotmail.com
To: bulk88 via RT <perlbug-followup [...] perl.org>
Subject: Re: [perl #133009] stacksize in Storable failure on Windows XP
From: Tony Cook <tony [...] develop-help.com>
Date: Thu, 29 Mar 2018 10:44:28 +1100
CC: ;, perl5-porters [...] perl.org
Download (untitled) / with headers
text/plain 2.6k
On Wed, Mar 28, 2018 at 06:42:52AM -0700, bulk88 via RT wrote: Show quoted text
> On Mon, 26 Mar 2018 22:28:32 -0700, tonyc wrote:
> > I could see this happening if Storable itself (or Exporter, Carp) was > > unbuilt or broken. > > > > The extra test in the new patch should catch that and prevent > > stacksize "succeeding" erroneously. > >
> > > The code really isn't good at detecting build process bugs. If I > > > poison the -e string to always die in sub cmd in stacksize.pl, > > > stacksize.pl doesn't figure it out. Stacksize.pl should try at level > > > 1 > > > of depth, and that HAS to always pass or bail out totally and never > > > generate Limit.pm. Not try downwards till it hits zero/one level.
> > > > I've attached an updated patch which does check that a minimal run > > works. > > > > Thanks. > > > > Tony
> > I tested this patch. There are 2 problems. First "die "Cannot run probe, aborting...\n";" is below "unless ($ENV{STORABLE_NOISY}) {", so that message "Cannot run probe, aborting...\n" will never be seen if it was written to the handle. The "Cannot run probe, aborting...\n" needs to execute before STDERR is silenced.
Thanks. Show quoted text
> Second, why is the test not done on <Win 7? I did read https://rt.perl.org/Ticket/Display.html?id=132893 but I removed the version check and it runs fine for me on XP and server 2003 64b, VC and Mingw included. > > I did through experimenting find out, if I remove the set_error_mode popup suppression code, then as intended the VS "JIT debugger" popup comes up, if I click "No" in the box, the crashed perl process's exit code is 0 according to procmon, and stacksize.pl gets a 0 also, and sets the recursion limit to 65000 or 64999 since each run always "passes". If I click yes, then detach the process from VS debugger, the exit code of the process is 128. If set_error_mode() popup suppression is on (VS debugger didnt popup) the exit code of the proc is 0xc00000fd which is reasonable/expected. This shows, its undefined behavior to assume a crash proc's exit code is non-zero on all OSes. A "im alive" print after "dclone(\$t);" and switching from system to `` might be needed to prove the proc didnt crash. Exit code is just a 99% guarantee. I dont know why chorny's box hung. He never gave enough details. JIT Debugger popup he didn't see? (proc explorer provable).
When I tested on Windows XP without the version check the child process got stuck in a loop somewhere in the runtime. I didn't test Vista. That doesn't happen for me on Windows 7, which is where I do most of my Win32 testing. As to the exit codes, maybe it should checking for specific output rather than the exit code, though that doesn't help with the case in this ticket, since the child process never exits. Tony
RT-Send-CC: perl5-porters [...] perl.org
Download (untitled) / with headers
text/plain 823b
On Wed, 28 Mar 2018 16:44:42 -0700, tonyc wrote: Show quoted text
> When I tested on Windows XP without the version check the child > process got stuck in a loop somewhere in the runtime. > > I didn't test Vista. > > That doesn't happen for me on Windows 7, which is where I do most of > my Win32 testing. > > As to the exit codes, maybe it should checking for specific output > rather than the exit code, though that doesn't help with the case in > this ticket, since the child process never exits. > > Tony
What what the callstack from the VC debugger if you paused the child proc? Which VC version did you use or was this Mingw? I'm seeing somekind of nasty SEH/C++ exception/try catch/TLS bug that needs to be fixed if a perl proc can't crash and instead just hangs or worse burns infinite CPU. -- bulk88 ~ bulk88 at hotmail.com
RT-Send-CC: perl5-porters [...] perl.org
Download (untitled) / with headers
text/plain 722b
On Thu, 29 Mar 2018 06:49:32 -0700, bulk88 wrote: Show quoted text
> What what the callstack from the VC debugger if you paused the child > proc? Which VC version did you use or was this Mingw? I'm seeing > somekind of nasty SEH/C++ exception/try catch/TLS bug that needs to be > fixed if a perl proc can't crash and instead just hangs or worse burns > infinite CPU.
It was the gcc supplied with strawberry perl, and a 32-bit build (since my XP x64 machine failed a while back.) I've applied my fix, with a change to check the output rather than the exit code as c8435d23822f81fcc007463002bb2ea843e008a0. I fixed two other dependency issues in 40507cbf67f7e39da9d4745f240a0ef6b580266d and bcdb10f52b7a5b5ba1252af82319ddfa72ee2973. Tony
To: perlbug-followup [...] perl.org
Date: Mon, 2 Apr 2018 08:19:25 -0600
From: Karl Williamson <public [...] khwilliamson.com>
Subject: Re: [perl #133009] stacksize in Storable failure on Windows XP
CC: perl5-porters [...] perl.org
On 04/01/2018 07:56 PM, Tony Cook via RT wrote: Show quoted text
> On Thu, 29 Mar 2018 06:49:32 -0700, bulk88 wrote:
>> What what the callstack from the VC debugger if you paused the child >> proc? Which VC version did you use or was this Mingw? I'm seeing >> somekind of nasty SEH/C++ exception/try catch/TLS bug that needs to be >> fixed if a perl proc can't crash and instead just hangs or worse burns >> infinite CPU.
> > It was the gcc supplied with strawberry perl, and a 32-bit build (since my XP x64 machine failed a while back.) > > I've applied my fix, with a change to check the output rather than the exit code as c8435d23822f81fcc007463002bb2ea843e008a0. > > I fixed two other dependency issues in 40507cbf67f7e39da9d4745f240a0ef6b580266d and bcdb10f52b7a5b5ba1252af82319ddfa72ee2973. > > Tony > > --- > via perlbug: queue: perl5 status: open > https://rt.perl.org/Ticket/Display.html?id=133009 >
I believe that this line in the patch(es) if ($major < 6 || $major == 6 && $minor < 1) should parenthesize the stuff after the ||
RT-Send-CC: perl5-porters [...] perl.org
Download (untitled) / with headers
text/plain 515b
On Sun, 01 Apr 2018 18:56:38 -0700, tonyc wrote: Show quoted text
> It was the gcc supplied with strawberry perl, and a 32-bit build > (since my XP x64 machine failed a while back.)
I tried "gcc version 4.9.2 (i686-posix-sjlj, built by strawberryperl.com project)" no hang running stacksize.pl. Can you try and see if it hangs for you still and what exact GCC ver u used? Mingw 3.4.5 "vista special", the oldest GCC we support I think, doesn't build blead when I tried it. Probably new breakage. -- bulk88 ~ bulk88 at hotmail.com
RT-Send-CC: perl5-porters [...] perl.org
Download (untitled) / with headers
text/plain 250b
On Mon, 02 Apr 2018 07:19:52 -0700, public@khwilliamson.com wrote: Show quoted text
> I believe that this line in the patch(es) > > if ($major < 6 || $major == 6 && $minor < 1) > > should parenthesize the stuff after the ||
&& has higher precedence than ||. Tony


This service is sponsored and maintained by Best Practical Solutions and runs on Perl.org infrastructure.

For issues related to this RT instance (aka "perlbug"), please contact perlbug-admin at perl.org