New submission from sbt <[email protected]>:
If SIGINT arrives while a function implemented in C is executing, then it
prevents the function from raising an exception unless the function first calls
PyErr_CheckSignals(). (If the function returns an object (instead of NULL)
then KeyboardInterrupt is raised as expected.)
For example, the following function just spins for 5 seconds before raising
RuntimeError:
static PyObject *
testsigint_wait(PyObject *self, PyObject *arg)
{
clock_t start = clock();
while (clock() - start < 5 * CLOCKS_PER_SEC) {
/* pass */
}
//PyErr_CheckSignals();
PyErr_SetNone(PyExc_RuntimeError);
return NULL;
}
If I call this function and press Ctrl-C before it completes, then I get the
following:
>>> import testsigint
>>> a = testsigint.wait()
^C>>> print(a)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'a' is not defined
So the call failed, but no exception was raised, and the variable "a" was not
set!
I would have expected RuntimeError (or KeyboardInterrupt) to be raised. If I
uncomment the PyErr_CheckSignals() line then I get RuntimeError as expected:
>>> import testsigint
>>> a = testsigint.wait()
^CTraceback (most recent call last):
File "<stdin>", line 1, in <module>
RuntimeError
Also, if I wrap the call in try...finally or try...except, I get a sensible
"chained" traceback:
>>> try:
... testsigint.wait()
... finally:
... print("done")
...
^CTraceback (most recent call last):
File "<stdin>", line 2, in <module>
RuntimeError
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "<stdin>", line 2, in <module>
KeyboardInterrupt
(Tested under Linux and Windows with the default branch.)
----------
files: testsigint.zip
messages: 150319
nosy: sbt
priority: normal
severity: normal
status: open
title: SIGINT prevents raising of exceptions unless PyErr_CheckSignals() called
versions: Python 3.3
Added file: http://bugs.python.org/file24100/testsigint.zip
_______________________________________
Python tracker <[email protected]>
<http://bugs.python.org/issue13673>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe:
http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com