Mercurial > cpython-lru_cache-weakref
diff Python/pythonrun.c @ 83624:6f4627a65c0a
Fix crash caused by 8c1385205a35
(thanks Arfrever for reporting).
| author | Antoine Pitrou <solipsis@pitrou.net> |
|---|---|
| date | Sun, 05 May 2013 08:14:53 +0200 |
| parents | 97b7bd87c44c 7de9852cdc0e |
| children | f0833e6ff2d2 |
line wrap: on
line diff
--- a/Python/pythonrun.c Sat May 04 18:11:30 2013 -0400 +++ b/Python/pythonrun.c Sun May 05 08:14:53 2013 +0200 @@ -576,6 +576,9 @@ /* Destroy the database used by _PyImport_{Fixup,Find}Extension */ _PyImport_Fini(); + /* Cleanup typeobject.c's internal caches. */ + _PyType_Fini(); + /* unload faulthandler module */ _PyFaulthandler_Fini(); @@ -596,7 +599,7 @@ _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 @@ -612,10 +615,6 @@ _PyGILState_Fini(); #endif /* WITH_THREAD */ - /* Delete current thread */ - PyThreadState_Swap(NULL); - PyInterpreterState_Delete(interp); - /* Sundry finalizers */ PyMethod_Fini(); PyFrame_Fini(); @@ -629,11 +628,14 @@ 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);
