]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
Fix crash caused by 8c1385205a35
authorAntoine Pitrou <solipsis@pitrou.net>
Sun, 5 May 2013 06:12:42 +0000 (08:12 +0200)
committerAntoine Pitrou <solipsis@pitrou.net>
Sun, 5 May 2013 06:12:42 +0000 (08:12 +0200)
(thanks Arfrever for reporting).

Python/pythonrun.c

index ddda4a4cd08c076f7c4b3078da93acf1256b7b38..9ef653b57a827a47f5c729e1cfe4c295b2f7fbaf 100644 (file)
@@ -558,6 +558,9 @@ Py_Finalize(void)
     /* Destroy the database used by _PyImport_{Fixup,Find}Extension */
     _PyImport_Fini();
 
+    /* Cleanup typeobject.c's internal caches. */
+    _PyType_Fini();
+
     /* unload faulthandler module */
     _PyFaulthandler_Fini();
 
@@ -578,7 +581,7 @@ Py_Finalize(void)
         _Py_PrintReferences(stderr);
 #endif /* Py_TRACE_REFS */
 
-    /* Clear interpreter state */
+    /* Clear interpreter state and all thread states. */
     PyInterpreterState_Clear(interp);
 
     /* Now we decref the exception classes.  After this point nothing
@@ -594,10 +597,6 @@ Py_Finalize(void)
     _PyGILState_Fini();
 #endif /* WITH_THREAD */
 
-    /* Delete current thread */
-    PyThreadState_Swap(NULL);
-    PyInterpreterState_Delete(interp);
-
     /* Sundry finalizers */
     PyMethod_Fini();
     PyFrame_Fini();
@@ -611,11 +610,14 @@ Py_Finalize(void)
     PyFloat_Fini();
     PyDict_Fini();
     PySlice_Fini();
-    _PyType_Fini();
 
     /* Cleanup Unicode implementation */
     _PyUnicode_Fini();
 
+    /* Delete current thread. After this, many C API calls become crashy. */
+    PyThreadState_Swap(NULL);
+    PyInterpreterState_Delete(interp);
+
     /* reset file system default encoding */
     if (!Py_HasFileSystemDefaultEncoding && Py_FileSystemDefaultEncoding) {
         free((char*)Py_FileSystemDefaultEncoding);