Bugs item #1643738, was opened at 2007-01-24 16:14
Message generated for change (Tracker Item Submitted) made by Item Submitter
You can respond by visiting: 
https://sourceforge.net/tracker/?func=detail&atid=105470&aid=1643738&group_id=5470

Please note that this message will contain a full copy of the comment thread,
including the initial issue submission, for this request,
not just the latest update.
Category: Python Library
Group: Python 2.5
Status: Open
Resolution: None
Priority: 5
Private: No
Submitted By: Ulisses Furquim (ulissesf)
Assigned to: Nobody/Anonymous (nobody)
Summary: Problem with signals in a single-threaded application

Initial Comment:
I'm aware of the problems with signals in a multithreaded application, but I 
was using signals in a single-threaded application and noticed something that 
seemed wrong. Some signals were apparently being lost, but when another signal 
came in the python handler for that "lost" signal was being called.

The problem seems to be inside the signal module. The global variable 
is_tripped is incremented every time a signal arrives. Then, inside 
PyErr_CheckSignals() (the pending call that calls all python handlers for 
signals that arrived) we can return immediately if is_tripped is zero. If 
is_tripped is different than zero, we loop through all signals calling the 
registered python handlers and after that we zero is_tripped. This seems to be 
ok, but what happens if a signal arrives after we've returned from its handler 
(or even after we've checked if that signal arrived) and before we zero 
is_tripped? I guess we can have a situation where is_tripped is zero but some 
Handlers[i].tripped are not. In fact, I've inserted some debugging output and 
could see that this actually happens and then I've written the attached test 
program to reproduce the problem.

When we run this program, the handler for the SIGALRM isn't called after we 
return from the  SIGIO handler. We return to our main loop and print 'Loop!' 
every 3 seconds aprox. and the SIGALRM handler is called only when another 
signal arrives (like when we hit Ctrl-C).


----------------------------------------------------------------------

You can respond by visiting: 
https://sourceforge.net/tracker/?func=detail&atid=105470&aid=1643738&group_id=5470
_______________________________________________
Python-bugs-list mailing list 
Unsubscribe: 
http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com

Reply via email to