Message379974
If you apply attached logging.patch, Python crash using attached crash.py:
$ echo|./python -i crash.py
>>>
>>>
python: Python/_warnings.c:872: setup_context: Assertion `globals != NULL' failed.
Abandon (core dumped)
Attached logging.patch is a fix for bpo-26789: logging.FileHandler keeps a reference to the builtin open() function.
Attached crash.py does crash because of an unclosed file. It happens after PyInterpreterState_Clear(), in finalize_interp_clear():
/* Last explicit GC collection */
_PyGC_CollectNoFail();
setup_context() of Python/_warings.c does crash because tstate->interp->sysdict is NULL at this point.
Moreover, _io.TextIOWrapper.__init__() fails to import the locale module (to call locale.getpreferredencoding(), since the encoding is None) and picks the "ascii" encoding.
Moreover, even if I work around all these issues, _warnings.showwarnings() logs "lost sys.stderr" into stderr because, again, tstate->interp->sysdict is NULL at this point (and so sys.stderr no longer exists).
It looks like a bug in finalize_interp_clear() which triggers a garbage collection, whereas Python is no longer usable.
--
The logging module does automatically close files at exit using:
atexit.register(shutdown)
But crash.py, a new file is opened by a logging handler after logging.shutdown() is called. Maybe another problem is that the logging module does not clear logger handlers, or prevent handlers to log more message, after shutdown() is called. |
|
Date |
User |
Action |
Args |
2020-10-30 14:57:17 | vstinner | set | recipients:
+ vstinner |
2020-10-30 14:57:17 | vstinner | set | messageid: <1604069837.91.0.668538321247.issue42208@roundup.psfhosted.org> |
2020-10-30 14:57:17 | vstinner | link | issue42208 messages |
2020-10-30 14:57:17 | vstinner | create | |
|