Tue Aug 09 06:52:49 2011: Request 69848 was acted upon.
Transaction: Correspondence added by RSCHUPP
Queue: PAR-Packer
Subject: pp created exe crash if useing parallel loops
Broken in: (no value)
Severity: (no value)
Owner: Nobody
Requestors: [email protected]
Status: open
Ticket <URL: https://rt.cpan.org/Ticket/Display.html?id=69848 >
On 2011-08-03 02:38:43, RSCHUPP wrote:
> piece of the PAR::Packer machinery needs consideration and
> extensive testing for which I don't have time ATM.
Just as a reminder to myself...
Things done to narrow down the problem - but still no solution:
- reduced the span of the BEGIN block in script/par.pl
- verified that the packed script is NOT executed from "inside"
BEGIN or eval() any more
- set PL_perl_destruct_level=1 in myldr/main.c for perl_construct()
and perl_destruct() call (but to no avail)
- problem occurs definitely AFTER the end of normal execution
(but still in perl_run())
- using Devel::Symdump we see that the only END blocks registered
are in File::Temp, PAR and par.pl
- by instrumenting these END blocks we see that the problem
occurs AFTER they have been run
- the problem is not specific to Parallel::Loops or
Parallel::ForkManager, the following script shows the same
symptoms (with or without the wait()ing at the end)
use strict;
use warnings;
for (1..5)
{
my $pid = fork();
die "fork failed: $!" unless defined $pid;
if ($pid == 0)
{
# child
print STDERR "child $$\n";
exit(0);
}
}
print STDERR "waiting for children ...\n";
while ((my $pid = wait()) != -1)
{
print STDERR "reaped $pid\n";
}