Issue #9501: Fixed logging regressions in cleanup code.
diff --git a/Lib/logging/__init__.py b/Lib/logging/__init__.py
index dca0017..b4eaab6 100644
--- a/Lib/logging/__init__.py
+++ b/Lib/logging/__init__.py
@@ -609,12 +609,16 @@
     """
     Remove a handler reference from the internal cleanup list.
     """
-    _acquireLock()
-    try:
-        if wr in _handlerList:
-            _handlerList.remove(wr)
-    finally:
-        _releaseLock()
+    # This function can be called during module teardown, when globals are
+    # set to None. If _acquireLock is None, assume this is the case and do
+    # nothing.
+    if _acquireLock is not None:
+        _acquireLock()
+        try:
+            if wr in _handlerList:
+                _handlerList.remove(wr)
+        finally:
+            _releaseLock()
 
 def _addHandlerRef(handler):
     """
@@ -1604,8 +1608,16 @@
         #we just ignore them if raiseExceptions is not set
         try:
             h = wr()
-            h.flush()
-            h.close()
+            if h:
+                try:
+                    h.flush()
+                    h.close()
+                except (IOError, ValueError):
+                    # Ignore errors which might be caused
+                    # because handlers have been closed but
+                    # references to them are still around at
+                    # application exit.
+                    pass
         except:
             if raiseExceptions:
                 raise
diff --git a/Misc/NEWS b/Misc/NEWS
index 6e49fac..75375ab 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -123,6 +123,8 @@
 Library
 -------
 
+- Issue #9501: Fixed logging regressions in cleanup code.
+
 - Fix functools.total_ordering() to actually work.
 
 - Issue #9572: Importlib should not raise an exception if a directory it