in reply to Re^2: Calling exit() in thread does not call exit handler
in thread Calling exit() in thread does not call exit handler

I use a thread to be able to force an exit of the main thread

That is really, really, really bad design -- (*)like designing a train where the only way to get off is to smash a window and jump; and hoping that there'll be somewhere soft to land -- and it will come back to bite you!

* That's a pretty terrible analogy; maybe this is better: Like designing a satnav such that when you reach your destination, it kills your engine dead and then relies upon the anti-skid brakes and collision avoidance systems to bring you to a halt safely.

I seriously caution you against taking this design forward. Especially when it is so simple to avoid it:

use strict; use threads; use threads::shared; my $inthread : shared; sub doCleanUp { print "doing cleanup"; } 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/ ) { print "triggering cleanup in main\n"; return -1; } return 0; }; $thread->join() and doCleanUp() if ($thread); print "End of main program\n"; __END__ C:\test>junk29 Sleep in thread finished triggering cleanup in main doing cleanupEnd 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.
  • Comment on Re^3: Calling exit() in thread does not call exit handler (broken by design)
  • Download Code