From 21b60147e9d4e6c895b581429d292cb60bcdb5e7 Mon Sep 17 00:00:00 2001
From: Guido van Rossum <guido@python.org>
Date: Thu, 21 Nov 2002 21:08:39 +0000
Subject: The _Event class should be more careful with releasing its lock when
 interrupted.  A try/finally will do nicely.  Maybe other classes need this
 too, but since they manipulate more state it's less clear that that is always
 the right thing, and I'm in a hurry.

Backport candidate.
---
 Lib/threading.py | 22 ++++++++++++++--------
 1 file changed, 14 insertions(+), 8 deletions(-)

diff --git a/Lib/threading.py b/Lib/threading.py
index f949d75..1e769a8 100644
--- a/Lib/threading.py
+++ b/Lib/threading.py
@@ -318,20 +318,26 @@ class _Event(_Verbose):
 
     def set(self):
         self.__cond.acquire()
-        self.__flag = True
-        self.__cond.notifyAll()
-        self.__cond.release()
+        try:
+            self.__flag = True
+            self.__cond.notifyAll()
+        finally:
+            self.__cond.release()
 
     def clear(self):
         self.__cond.acquire()
-        self.__flag = False
-        self.__cond.release()
+        try:
+            self.__flag = False
+        finally:
+            self.__cond.release()
 
     def wait(self, timeout=None):
         self.__cond.acquire()
-        if not self.__flag:
-            self.__cond.wait(timeout)
-        self.__cond.release()
+        try:
+            if not self.__flag:
+                self.__cond.wait(timeout)
+        finally:
+            self.__cond.release()
 
 # Helper to generate new thread names
 _counter = 0
-- 
cgit v0.12

