On Mon Apr 20 05:58:28 2009, DOLMEN wrote:
Show quoted text> Disabling USE_SIGCHLD in the test makes it pass.
> It looks like my perl (5.8.0 on hpux PARISC) is too old.
>
> Could you help me to diagnose if this bug is critical?
> Will I encounters some problems with my application which uses
> POE::Wheel::Run and monitors SIGCHLD without USE_SIGCHLD?
I've attached a SIGCHLD handler test case that doesn't use POE. It
tries to mimic POE's SIGCHLD handler, and it tries to detect deep
recursion before Perl crashes.
Please try the test case and add the output to this ticket. Thank you
for your help.
The deep recursion is happening in POE's SIGCHLD handler at the point
where $SIG{CHLD} is reset. My best guess is that resetting $SIG{CHLD}
immediately triggers another SIGCHLD, causing the SIGCHLD handler to be
called from within itself. Deep recursion results.
It may be that HP-UX behaves slightly different in this regard. In this
case, Perl should be smoothing over the differences so that its basic
signal handling behaves the same.
Perl 5.8.0 is rather buggy, as Perl versions go. It seems likely that a
newer version of Perl fixes this issue.
I would try the test case with Perl 5.8.0 to see whether the test case
reproduces the problem.
I would then try it with 5.8.8 to see whether the problem has been fixed
in Perl.
If 5.8.8 also recurses deeply, I would ask the perl5porters list to try
the test case and respond whether it's a Perl issue or a known behavior.
If they decide the behavior should stand, then I would consider
restructuring POE's signal handler to work around it.