summaryrefslogtreecommitdiffstats
path: root/Python/_warnings.c
diff options
context:
space:
mode:
authorVictor Stinner <victor.stinner@gmail.com>2013-10-29 23:04:59 (GMT)
committerVictor Stinner <victor.stinner@gmail.com>2013-10-29 23:04:59 (GMT)
commit856f45f09c1fe69cab4cf11159f60f0f0cc5bb07 (patch)
tree62c27039e6ba63d7a2ff93cd96524b724a15ac22 /Python/_warnings.c
parentc0e07a3ea00ee94618fc51072aeda27f7d7c3d25 (diff)
downloadcpython-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.
Diffstat (limited to 'Python/_warnings.c')
-rw-r--r--Python/_warnings.c17
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, &registry))
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);