Issue #20526, #19466: Revert changes of issue #19466 which introduces a
regression: don't clear anymore the state of Python threads early during the
Python shutdown.
diff --git a/Python/pythonrun.c b/Python/pythonrun.c
index 34a291f..e9947e9 100644
--- a/Python/pythonrun.c
+++ b/Python/pythonrun.c
@@ -582,13 +582,11 @@
     _Py_Finalizing = tstate;
     initialized = 0;
 
-    /* Destroy the state of all threads except of the current thread: in
-       practice, only daemon threads should still be alive. Clear frames of
-       other threads to call objects destructor. Destructors will be called in
-       the current Python thread. Since _Py_Finalizing has been set, no other
-       Python threads can lock the GIL at this point (if they try, they will
-       exit immediately). */
-    _PyThreadState_DeleteExcept(tstate);
+    /* Flush stdout+stderr */
+    flush_std_files();
+
+    /* Disable signal handling */
+    PyOS_FiniInterrupts();
 
     /* Collect garbage.  This may call finalizers; it's nice to call these
      * before all modules are destroyed.
@@ -603,7 +601,6 @@
      * XXX I haven't seen a real-life report of either of these.
      */
     PyGC_Collect();
-
 #ifdef COUNT_ALLOCS
     /* With COUNT_ALLOCS, it helps to run GC multiple times:
        each collection might release some types from the type
@@ -611,13 +608,6 @@
     while (PyGC_Collect() > 0)
         /* nothing */;
 #endif
-
-    /* Flush stdout+stderr */
-    flush_std_files();
-
-    /* Disable signal handling */
-    PyOS_FiniInterrupts();
-
     /* Destroy all modules */
     PyImport_Cleanup();