]> git.ipfire.org Git - thirdparty/psycopg.git/commitdiff
Don't try to execute transaction finalization with the connection closed
authorDaniele Varrazzo <daniele.varrazzo@gmail.com>
Thu, 9 Dec 2021 13:56:53 +0000 (14:56 +0100)
committerDaniele Varrazzo <daniele.varrazzo@gmail.com>
Thu, 9 Dec 2021 14:30:24 +0000 (15:30 +0100)
psycopg/psycopg/transaction.py

index 90cc69a22a5cd7a8a5b22ffac57d524fc40d54b3..3ea0a0b96f3109728606d26b2f923b75a25effdb 100644 (file)
@@ -12,7 +12,7 @@ from typing import Generic, List, Optional, Type, Union, TYPE_CHECKING
 from . import pq
 from . import sql
 from . import errors as e
-from .pq import TransactionStatus
+from .pq import TransactionStatus, ConnStatus
 from .abc import ConnectionType, PQGen
 from .pq.abc import PGresult
 
@@ -258,8 +258,13 @@ class Transaction(BaseTransaction["Connection[Any]"]):
         exc_val: Optional[BaseException],
         exc_tb: Optional[TracebackType],
     ) -> bool:
-        with self._conn.lock:
-            return self._conn.wait(self._exit_gen(exc_type, exc_val, exc_tb))
+        if self._conn.pgconn.status == ConnStatus.OK:
+            with self._conn.lock:
+                return self._conn.wait(
+                    self._exit_gen(exc_type, exc_val, exc_tb)
+                )
+        else:
+            return False
 
 
 class AsyncTransaction(BaseTransaction["AsyncConnection[Any]"]):
@@ -284,7 +289,10 @@ class AsyncTransaction(BaseTransaction["AsyncConnection[Any]"]):
         exc_val: Optional[BaseException],
         exc_tb: Optional[TracebackType],
     ) -> bool:
-        async with self._conn.lock:
-            return await self._conn.wait(
-                self._exit_gen(exc_type, exc_val, exc_tb)
-            )
+        if self._conn.pgconn.status == ConnStatus.OK:
+            async with self._conn.lock:
+                return await self._conn.wait(
+                    self._exit_gen(exc_type, exc_val, exc_tb)
+                )
+        else:
+            return False