On Fri, 14 Jul 2006, Nicholas Clark wrote:
> Signals are per process (unless I'm confused)

That is correct, but PL_sig_pending and PL_psig_pend are still per-
interpreter variables, so there is still no race condition. OS
level signals are always delivered to the current interpreter in
the main thread.

I do wonder though what would happen if you had an embedding
application that does not host a Perl interpreter in the main thread.
dTHX in Perl_sighandler() should then set my_perl to NULL, generating
an access violation. On Windows there is code to explicitly use
PL_curinterp in this case (win32_signal_context() in win32/win32.c,
via PERL_GET_SIG_CONTEXT). I don't understand why this isn't
necessary on Unix.

Cheers,
-Jan


Reply via email to