Re: Threads signalling issue [was RE: threads change]

[email protected] (Artur Bergman)
Newsgroups perl.perl5.porters,perl.ithreads
Message-ID <[email protected]>
On Jul 14, 2006, at 10:58 AM, Jan Dubois wrote:

> On Fri, 14 Jul 2006, Jerry D. Hedden wrote:
>> If you mean that PL_psig_pend[signal], etc. should be
>> locked:
>>
>>          /* Set the signal for the thread */
>>          thread = SV_to_ithread(aTHX_ ST(0));
>>          MUTEX_LOCK(&thread->mutex);
>>          if (thread->interp) {
>>              dTHXa(thread->interp);
>>
>>              /*** SET A "SIGNAL" LOCK HERE ***/
>>              PL_psig_pend[signal]++;
>>              PL_sig_pending = 1;
>>              /*** UNLOCK HERE ***/
>>
>>          }
>>          MUTEX_UNLOCK(&thread->mutex);
>>
>> then what should the fix be?  Anyone?
>
> I explained before that this code is threadsafe because the actual  
> value
> of PL_psig_pend[signal] is irrelevant as long as it is set to a non- 
> zero
> value, which is what you'll do even if the increment is non-atomic.
>
> There is also no problem if the receiving thread processes the signal
> before PL_sig_pending has been set. All that is going to happen  
> that it
> will waste a few cycle checking for pending signals again and not
> finding any.
>
> There is no need to add any locking to the code above as long as Perl
> isn't implementing "queued" signals.
>
> Cheers,
> -Jan
>
> PS: I'm not seeing any of Artur's messages; aren't they being  
> copied to
> p5p?
>
>

It is threadsafe in the sense you won't crash, but PL_sig_pending  
might be set to 0 by the running thread and thus not cause the signal  
to be delivered until another signal is raised.

I don't think the fix is to add locking into the dispatcher :D

I guess a moderator needs to add me.

Artur
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.