Message239776
| 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:59 | vstinner | set | recipients:
+ vstinner |
| 2015年04月01日 09:43:59 | vstinner | set | messageid: <1427881439.29.0.554454019096.issue23836@psf.upfronthosting.co.za> |
| 2015年04月01日 09:43:59 | vstinner | link | issue23836 messages |
| 2015年04月01日 09:43:58 | vstinner | create |
|