Hello monks! Long time fan, first time poster.
I've got a code snipped that shows that threads::join() appears to be non-interruptible, which seems to be at odds with the alarm perldoc. When this code runs, it just hangs, as the SIGALRM is never delivered. If I replace the call to join() with a while(1){}, then the alarm is delivered properly. I'm running perl 5.16.3.
I posted this over at StackOverflow, here, before I thought to post it to the Monks. Someone gave me an answer which seems perfectly plausible, but isn't very satisfactory given that other system calls are interruptible, and pthread_join is interruptible. Despite the answer I got on SO, I'm questioning its accuracy because I've found plenty of examples on the web of other people claiming that this is a perfectly reasonable thing to do, and I'm assuming at least one of them actually tried running their code before memorializing it on the Internet.
#!/usr/bin/env perl use strict; use warnings; use threads; sub worker { print "Worker thread started.\n"; while(1){} } my $thread = threads->create(\&worker); print "Setting alarm.\n"; $SIG{ALRM} = sub { print "Alarm!\n" }; alarm 2; print "Joining.\n"; $thread->join();
In reply to Why does threads::join block SIGALRM by CDahn
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |