New submission from Vilya Harvey <vilya.har...@gmail.com>:

The signal module is oblivious to any changes to the set of installed signal 
handlers which occur outside of the module. This can happen when a native 
module changes a signal handler, or when the python interpreter is embedded in 
another program which installs its own signal handlers.

In this case, saving and restoring a signal handler through python doesn't work 
correctly. For example, if the SIGINT handler is set externally after the 
signal module is initialised, the following code will replace the external 
signal handler with python's default_int_handler:

  handler = signal.getsignal(signal.SIGINT)
  signal.signal(signal.SIGINT, handler)

So it's impossible to reliably save and restore signal handlers through python 
when they can also be changed outside the python interpreter.

Also, if there's a signal handler installed before the module is initialised, 
signal.getsignal() will return None for it - making it impossible to restore 
the correct handler after disabling it.

The reason is that the signal module only checks for existing handlers when 
it's initialised. The results get stored in the Handlers array, which is then 
used by all subsequent calls to signal.getsignal(). There are no further checks 
to see whether the native signal handlers have changed.

----------
messages: 146553
nosy: vilya
priority: normal
severity: normal
status: open
title: signal module in ignores external signal changes
type: behavior
versions: Python 2.6, Python 2.7, Python 3.1, Python 3.2

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

Reply via email to