nh2 <n...@deditus.de> added the comment:

I think this is still an issue.

If I register signal.signal(signal.SIGINT, handler) in the main thread, I get a 
race between
- only the main thread receives the signal (everything is fine)
- both the main thread and currently running threads receive the signal => the 
handler is called multiple times => all kinds of resource-problems like "close 
failed in file object destructor: IOError: [Errno 9] Bad file descriptor" in 
thread cleanup functions

Note that I cannot even declare a sigintlock = threading.Lock() and use with 
sigintlock in the handler - if I print threading.current_thread() and 
sys.exit() directly afterwards in the locked area, I sometimes get two print 
outputs which show MainThread and Thread-1 being inside the locked area at the 
same time!

Is the synchronization broken or am I doing something wrong?

Is synchronization over handlers really the way to cope with this? Disabling 
signals for non-main threads currently seems more sensible to me.

Can someone please verify the race I get?

----------
nosy: +nh2

_______________________________________
Python tracker <rep...@bugs.python.org>
<http://bugs.python.org/issue1975>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe: 
http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com

Reply via email to