diff options
author | Victor Stinner <victor.stinner@gmail.com> | 2013-10-29 23:04:59 (GMT) |
---|---|---|
committer | Victor Stinner <victor.stinner@gmail.com> | 2013-10-29 23:04:59 (GMT) |
commit | 856f45f09c1fe69cab4cf11159f60f0f0cc5bb07 (patch) | |
tree | 62c27039e6ba63d7a2ff93cd96524b724a15ac22 | |
parent | c0e07a3ea00ee94618fc51072aeda27f7d7c3d25 (diff) | |
download | cpython-856f45f09c1fe69cab4cf11159f60f0f0cc5bb07.zip cpython-856f45f09c1fe69cab4cf11159f60f0f0cc5bb07.tar.gz cpython-856f45f09c1fe69cab4cf11159f60f0f0cc5bb07.tar.bz2 |
Issue #19442: Fix warnings emitted during Python shutdown
Warnings may be emitted during Python shutdown, like "unclosed file XXX".
During shutdown, globals()['__main__'] may be None.
-rw-r--r-- | Python/_warnings.c | 17 |
1 files changed, 12 insertions, 5 deletions
diff --git a/Python/_warnings.c b/Python/_warnings.c index cbc64e3..8d9666a 100644 --- a/Python/_warnings.c +++ b/Python/_warnings.c @@ -540,7 +540,7 @@ setup_context(Py_ssize_t stack_level, PyObject **filename, int *lineno, } else { *filename = NULL; - if (PyUnicode_CompareWithASCIIString(*module, "__main__") == 0) { + if (*module != Py_None && PyUnicode_CompareWithASCIIString(*module, "__main__") == 0) { PyObject *argv = PySys_GetObject("argv"); /* PyList_Check() is needed because sys.argv is set to None during Python finalization */ @@ -564,8 +564,8 @@ setup_context(Py_ssize_t stack_level, PyObject **filename, int *lineno, else { /* embedded interpreters don't have sys.argv, see bug #839151 */ *filename = PyUnicode_FromString("__main__"); - if (*filename == NULL) - goto handle_error; + if (*filename == NULL) + goto handle_error; } } if (*filename == NULL) { @@ -621,8 +621,15 @@ do_warn(PyObject *message, PyObject *category, Py_ssize_t stack_level) if (!setup_context(stack_level, &filename, &lineno, &module, ®istry)) return NULL; - res = warn_explicit(category, message, filename, lineno, module, registry, - NULL); + if (module != Py_None) { + res = warn_explicit(category, message, filename, lineno, module, registry, + NULL); + } + else { + /* FIXME: emitting warnings at exit does crash Python */ + res = Py_None; + Py_INCREF(res); + } Py_DECREF(filename); Py_DECREF(registry); Py_DECREF(module); |