]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
bpo-39198: Ensure logging global lock is released on exception in isEnabledFor (GH...
authorMiss Islington (bot) <31488909+miss-islington@users.noreply.github.com>
Tue, 7 Jan 2020 17:03:49 +0000 (09:03 -0800)
committerVinay Sajip <vinay_sajip@yahoo.co.uk>
Tue, 7 Jan 2020 17:03:49 +0000 (17:03 +0000)
(cherry picked from commit 950c6795aa0ffa85e103a13e7a04e08cb34c66ad)

Lib/logging/__init__.py
Misc/NEWS.d/next/Library/2020-01-02-20-21-03.bpo-39198.nzwGyG.rst [new file with mode: 0644]

index 6e017148861de8737b3607d8fc116e7c339afc03..b596f80f6fa520b6c4a5372ab888436190cb4722 100644 (file)
@@ -1619,12 +1619,15 @@ class Logger(Filterer):
             return self._cache[level]
         except KeyError:
             _acquireLock()
-            if self.manager.disable >= level:
-                is_enabled = self._cache[level] = False
-            else:
-                is_enabled = self._cache[level] = level >= self.getEffectiveLevel()
-            _releaseLock()
-
+            try:
+                if self.manager.disable >= level:
+                    is_enabled = self._cache[level] = False
+                else:
+                    is_enabled = self._cache[level] = (
+                        level >= self.getEffectiveLevel()
+                    )
+            finally:
+                _releaseLock()
             return is_enabled
 
     def getChild(self, suffix):
diff --git a/Misc/NEWS.d/next/Library/2020-01-02-20-21-03.bpo-39198.nzwGyG.rst b/Misc/NEWS.d/next/Library/2020-01-02-20-21-03.bpo-39198.nzwGyG.rst
new file mode 100644 (file)
index 0000000..ec4e81e
--- /dev/null
@@ -0,0 +1 @@
+If an exception were to be thrown in `Logger.isEnabledFor` (say, by asyncio timeouts or stopit) , the `logging` global lock may not be released appropriately, resulting in deadlock.  This change wraps that block of code with `try...finally` to ensure the lock is released.
\ No newline at end of file