[Python-Dev] Problem with signals in a single threaded application

Greg Ewing greg.ewing at canterbury.ac.nz
Sun Jan 28 01:59:50 CET 2007


Martin v. Löwis wrote:
> Greg Ewing schrieb:
>>>>Please
>>>try to come up with a patch (e.g. by putting a while(is_tripped) loop
>>>around the for loop).
>>>>That isn't going to fix it. 
>> Why not?

Correct me if I'm wrong, but what I got from the OP
was that the current method does
 if (is_tripped) {
 for each signal {
 if the signal has occurred, call its handler
 }
 is_tripped = 0;
 }
and the problem is that any setting of is_tripped that
occurs in the midst of calling the handlers gets
wiped out at the end.
Changing this to
 while (is_tripped) {
 for each signal {
 if the signal has occurred, call its handler
 }
 is_tripped = 0;
 }
doesn't solve that, because is_tripped still gets
set to 0 before it's tested again.
> Also, why does it need to clear is_tripped atomically?

Thinking about it more, probably it doesn't. What's
important is to clear it *before* testing whether any
handlers need to be called, i.e.
 if (is_tripped) {
 is_tripped = 0;
 for each signal {
 if the signal has occurred, call its handler
 }
 }
If you really care, you can make that a while instead
of an if so that you don't have to wait until the next
CheckSignals. But if the signal had arrived a few
microseconds later you'd have to do that anyway, so
I don't see it as a big deal.
--
Greg


More information about the Python-Dev mailing list

AltStyle によって変換されたページ (->オリジナル) /