PyGILState cleanup was too early - destructors called via module cleanup may use the API.
diff --git a/Python/pythonrun.c b/Python/pythonrun.c
index e5759b7..a8dedde 100644
--- a/Python/pythonrun.c
+++ b/Python/pythonrun.c
@@ -254,11 +254,6 @@
 	call_sys_exitfunc();
 	initialized = 0;
 
-	/* Cleanup auto-thread-state */
-#ifdef WITH_THREAD
-	_PyGILState_Fini();
-#endif /* WITH_THREAD */
-
 	/* Get current thread state and interpreter pointer */
 	tstate = PyThreadState_Get();
 	interp = tstate->interp;
@@ -310,6 +305,11 @@
 	*/
 	_PyExc_Fini();
 
+	/* Cleanup auto-thread-state */
+#ifdef WITH_THREAD
+	_PyGILState_Fini();
+#endif /* WITH_THREAD */
+
 	/* Clear interpreter state */
 	PyInterpreterState_Clear(interp);