diff options
Diffstat (limited to 'Modules')
-rw-r--r-- | Modules/threadmodule.c | 18 |
1 files changed, 13 insertions, 5 deletions
diff --git a/Modules/threadmodule.c b/Modules/threadmodule.c index 62fd76a..8b174b3 100644 --- a/Modules/threadmodule.c +++ b/Modules/threadmodule.c @@ -179,20 +179,28 @@ t_bootstrap(void *boot_raw) PyEval_AcquireThread(tstate); res = PyEval_CallObjectWithKeywords( boot->func, boot->args, boot->keyw); - Py_DECREF(boot->func); - Py_DECREF(boot->args); - Py_XDECREF(boot->keyw); - PyMem_DEL(boot_raw); if (res == NULL) { if (PyErr_ExceptionMatches(PyExc_SystemExit)) PyErr_Clear(); else { - PySys_WriteStderr("Unhandled exception in thread:\n"); + PyObject *file; + PySys_WriteStderr( + "Unhandled exception in thread started by "); + file = PySys_GetObject("stderr"); + if (file) + PyFile_WriteObject(boot->func, file, 0); + else + PyObject_Print(boot->func, stderr, 0); + PySys_WriteStderr("\n"); PyErr_PrintEx(0); } } else Py_DECREF(res); + Py_DECREF(boot->func); + Py_DECREF(boot->args); + Py_XDECREF(boot->keyw); + PyMem_DEL(boot_raw); PyThreadState_Clear(tstate); PyThreadState_DeleteCurrent(); PyThread_exit_thread(); |