http://qs1969.pair.com?node_id=1105498


in reply to Calling exit() in thread does not call exit handler

calling exit() (I know, it is not recommended)

Then don't do that.

If you want to trap an abnormal exit from a thread, use eval & die just like you normally would:

use strict; use threads; use threads::shared; my $inthread : shared; # the exit handler (END block) is never called when a thread performs +an exit() # using a lower main sleep time will result in a normal exit of the ma +in thread. my $threadsleeptime : shared = 2; my $mainsleeptime = 5; my $thread = async { eval { $inthread = 1; sleep($threadsleeptime); print "Sleep in thread finished\n"; die('abnormal exit'); }; if( $@ =~ /^abnormal exit/ ) { ## do cleanup print "doing cleanup in thread\n"; } } sleep($mainsleeptime); print "Sleep in main finished\n"; $thread->join if ($thread); print "End of main program\n"; __END__ C:\test>junk29 Sleep in main finished Sleep in thread finished doing cleanup in thread End of main program

With the rise and rise of 'Social' network sites: 'Computers are making people easier to use everyday'
Examine what is said, not who speaks -- Silence betokens consent -- Love the truth but pardon error.
"Science is about questioning the status quo. Questioning authority".
In the absence of evidence, opinion is indistinguishable from prejudice.