This issue tracker has been migrated to GitHub, and is currently read-only.
For more information, see the GitHub FAQs in the Python's Developer Guide.

Author vstinner
Recipients vstinner
Date 2015-04-01.09:43:58
SpamBayes Score -1.0
Marked as misclassified Yes
Message-id <1427881439.29.0.554454019096.issue23836@psf.upfronthosting.co.za>
In-reply-to
Content
While working on the PEP 475, I noticed that the faulthandler module doesn't handle well reentrant calls to its signal handlers. If a signal is received while faulthandler is displaying the traceback, faulthandler restarts to display a new traceback (and then finish to display the previous traceback).

Moreover, faulthandler uses the C function write() to display the traceback and it ignores write() errors. It should retry write() if write() is interrupted by a signal (fails with EINTR).

Attached py_write_noraise.patch:

- Add a new _Py_write_noraise() function
- Document functions releasing the GIL

Attached traceback_eintr.patch:

- Modify functions displaying traceback to use _Py_write_noraise() instead of write()

Attached faulthandler_eintr.patch:

- Add a reentrant flag to the two signal handlers of faulthandler
- Modify faulthandler.dump_traceback() to call PyErr_CheckSignals(), to call the Python signal handler if a signal was received while faulthandler was displaying the traceback of all Python threads
History
Date User Action Args
2015-04-01 09:43:59vstinnersetrecipients: + vstinner
2015-04-01 09:43:59vstinnersetmessageid: <1427881439.29.0.554454019096.issue23836@psf.upfronthosting.co.za>
2015-04-01 09:43:59vstinnerlinkissue23836 messages
2015-04-01 09:43:58vstinnercreate