[Python-checkins] cpython: Issue #19442: Fix warnings emitted during Python shutdown

victor.stinner python-checkins at python.org
Wed Oct 30 00:35:26 CET 2013


http://hg.python.org/cpython/rev/1787277915e9
changeset:   86771:1787277915e9
user:        Victor Stinner <victor.stinner at gmail.com>
date:        Wed Oct 30 00:04:59 2013 +0100
summary:
  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.

files:
  Python/_warnings.c |  17 ++++++++++++-----
  1 files changed, 12 insertions(+), 5 deletions(-)


diff --git a/Python/_warnings.c b/Python/_warnings.c
--- a/Python/_warnings.c
+++ b/Python/_warnings.c
@@ -540,7 +540,7 @@
     }
     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 @@
             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 @@
     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);

-- 
Repository URL: http://hg.python.org/cpython


More information about the Python-checkins mailing list