arsvrv has asked for the wisdom of the Perl Monks concerning the following question:
#define PL_signals (vTHX->Isignals) if (PL_signals & PERL_SIGNALS_UNSAFE_FLAG) - failure here
This issue seems to be occurring due to a race condition between threads when they are exiting Similar issues in old versions have been patched by blocking the signals until the thread context is set as below: reference : https://rt.perl.org/Public/Bug/Display.html?id=60724
Is it possible to block a SIGTERM signal in the same way as it was done for the others to take care of this race condition and help thread context to be set and avoid the vTHX object from becoming null leading to this crash. Please advise of any further implications. Thanks/* Block most signals for calling thread, setting the old signal ma +sk to + * oldmask, if it is not NULL */ +STATIC int +S_block_most_signals(sigset_t *oldmask) +{ + sigset_t newmask; + + sigfillset(&newmask); + /* Don't block certain "important" signals (stolen from mg.c) +*/ +#ifdef SIGILL + sigdelset(&newmask, SIGILL); +#endif +#ifdef SIGBUS + sigdelset(&newmask, SIGBUS); +#endif +#ifdef SIGSEGV + sigdelset(&newmask, SIGSEGV); +#endif
2018-02-02 Athanasius added code tags and linkified link
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re: Mask SIGTERM in thread destruction to avoid a SIGTERM
by ikegami (Patriarch) on Feb 01, 2018 at 17:33 UTC |