[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