what can be used in a signal handler

hg hg at nospam.org
Thu Jan 18 11:44:44 EST 2007


Nick Maclaren wrote:

> 
> In article <3zKrh.30692$sE7.26486 at newsfe21.lga>,
> hg <hg at nospam.org> writes:
> |> 
> |> I posted an equivalent question earlier ... but am still not sure:
> |> 
> |> I currently (under Linux) have a program that uses Queue.put
> |> (raw_input('')) in a signal handler and Queue.get() in the main/only
> |> thread.
> |> 
> |> It works but I want to know if it is legal / what type of synchro API I
> |> have the right to use in a signal handler.
> 
> Strictly, no and none.
> 
> C and POSIX's specifications of signal handling is a complete mess.
> ALL handling of ALL real signals is undefined behaviour, though few
> programmers realise that and POSIX depends on it.  As that would make
> all Unices (and Microsoft systems) unusable, you can reasonably assume
> that there is some signal handling that will work.
> 
> But what?  Which is where you came in.
> 
> The situation is that most things that seem to work do actually work,
> in some environments and under some circumstances.  You can never be
> sure when they will stop working, however, and all bets are off when
> you port signal handling code to a new system.  And, really but REALLY,
> do not mix it with very high levels of optimisation or rely on it
> being in any way thread safe.
> 
> I can't tell you whether the code of Queue is intended to work if an
> active Queue.get is interrupted by a signal which then does a Queue.put,
> but that is the sort of circumstance where things get very hairy.  Even
> if Python has code to enable that case, it won't be 100% reliable on all
> systems.
> 
> Sorry.  But that is the situation :-(
> 
> 
> Regards,
> Nick Maclaren.

Fair, I'll find a way around then.

Regards,

hg





More information about the Python-list mailing list