]> git.ipfire.org Git - thirdparty/psycopg.git/commitdiff
Always stop monitoring fds in wait_{,conn_}async()
authorDenis Laxalde <denis.laxalde@dalibo.com>
Fri, 12 Nov 2021 13:34:43 +0000 (14:34 +0100)
committerDaniele Varrazzo <daniele.varrazzo@gmail.com>
Tue, 16 Nov 2021 10:28:18 +0000 (11:28 +0100)
psycopg/psycopg/waiting.py

index 7563d4f444817bba91ba2092e968acfef51c0d65..6355043095cf5438a525b8eb0a4d346c7fd46497 100644 (file)
@@ -135,11 +135,13 @@ async def wait_async(gen: PQGen[RV], fileno: int) -> RV:
                 loop.add_reader(fileno, wakeup, Ready.R)
             if writer:
                 loop.add_writer(fileno, wakeup, Ready.W)
-            await ev.wait()
-            if reader:
-                loop.remove_reader(fileno)
-            if writer:
-                loop.remove_writer(fileno)
+            try:
+                await ev.wait()
+            finally:
+                if reader:
+                    loop.remove_reader(fileno)
+                if writer:
+                    loop.remove_writer(fileno)
             s = gen.send(ready)
 
     except StopIteration as ex:
@@ -188,11 +190,13 @@ async def wait_conn_async(
                 loop.add_reader(fileno, wakeup, Ready.R)
             if writer:
                 loop.add_writer(fileno, wakeup, Ready.W)
-            await wait_for(ev.wait(), timeout)
-            if reader:
-                loop.remove_reader(fileno)
-            if writer:
-                loop.remove_writer(fileno)
+            try:
+                await wait_for(ev.wait(), timeout)
+            finally:
+                if reader:
+                    loop.remove_reader(fileno)
+                if writer:
+                    loop.remove_writer(fileno)
             fileno, s = gen.send(ready)
 
     except TimeoutError: