New submission from ABalmosan:

We use the Python lib as part of a larger process. This process sets its own 
signal handlers to achieve the expected behavior of the process.

We use Py_InitializeEx(0) to prevent Python to install its own signal handlers.

On process reconfigure we shutdown Python with Py_Finalize() to call 
Py_InitializeEx(0) anew. 

Even so Py_InitializeEx(0) did not touch any signal and especially not SIGINT, 
Py_Finalize() resets unconditionally SIGINT to SIG_DFL.

The result is that our process terminates immediately on SIGINT instead of 
execution its shutdown procedure which was handled by the orginal installed 
SIGINT handler.

The problem is visible in the python code in 

Modules/signalmodule.c:
static void
finisignal(void)
{
    int i;
    PyObject *func;

    PyOS_setsig(SIGINT, old_siginthandler);
    old_siginthandler = SIG_DFL;


In Python/pythonrun.c Py_InitializeEx()I find:

    if (install_sigs)
        initsigs(); /* Signal handling stuff, including initintr() */


Also I wonder by whom PyOS_InitInterrupts() is called. It would unconditionally 
install the Python signal handler even if Py_InitializeEx(0) was once executed.

----------
components: Interpreter Core
messages: 245060
nosy: ABalmosan
priority: normal
severity: normal
status: open
title: SIGINT always reset to SIG_DFL by Py_Finalize()
type: behavior
versions: Python 2.7

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

Reply via email to