in reply to forked die() in eval block has counterintuitive behavior?
A die() occurring within a forked child process will get caught by a containing eval block in the parent.
This is incorrect. I ran your test program and I didn't see anything to idicate that you are correct. Here's the output I saw:
(PID 20379) Beginning transaction #123 at foo.pl line 6. (the child fails) at foo.pl line 13. (PID 20380) Rolling back transaction #123: died in eval with Child pro +cess failure at foo.pl line 14. (the parent does OK) at foo.pl line 10. (PID 20379) Committing transaction #123 at foo.pl line 21.
Clearly the eval{} is catching the die() within the child, not the parent.
However, the general thrust of your post is quite correct: it is very bad for a module to fork() and not document that fact. Debugging a fork gone wrong can be very hard, particularly if you don't know a fork() might have happened!
-sam
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re^2: forked die() in eval block has counterintuitive behavior?
by rlucas (Scribe) on May 24, 2005 at 01:31 UTC | |
by samtregar (Abbot) on May 24, 2005 at 02:18 UTC |