summaryrefslogtreecommitdiff
path: root/redis/asyncio/client.py
diff options
context:
space:
mode:
authorChayim <chayim@users.noreply.github.com>2023-03-22 18:04:01 +0200
committerGitHub <noreply@github.com>2023-03-22 18:04:01 +0200
commitb3c89acd0ffe8303649ad8207bc911b1d6a033eb (patch)
tree8a2bf6473ab828e9542b2ebe493254831db74d3e /redis/asyncio/client.py
parent8592cacf9e5069f8f6d392a2bc02aeade87c9d69 (diff)
downloadredis-py-b3c89acd0ffe8303649ad8207bc911b1d6a033eb.tar.gz
AsyncIO Race Condition Fix (#2640)v4.4.3
Diffstat (limited to 'redis/asyncio/client.py')
-rw-r--r--redis/asyncio/client.py12
1 files changed, 9 insertions, 3 deletions
diff --git a/redis/asyncio/client.py b/redis/asyncio/client.py
index e56fd02..0bd21d3 100644
--- a/redis/asyncio/client.py
+++ b/redis/asyncio/client.py
@@ -1374,10 +1374,16 @@ class Pipeline(Redis): # lgtm [py/init-calls-subclass]
conn = cast(Connection, conn)
try:
- return await conn.retry.call_with_retry(
- lambda: execute(conn, stack, raise_on_error),
- lambda error: self._disconnect_raise_reset(conn, error),
+ return await asyncio.shield(
+ conn.retry.call_with_retry(
+ lambda: execute(conn, stack, raise_on_error),
+ lambda error: self._disconnect_raise_reset(conn, error),
+ )
)
+ except asyncio.CancelledError:
+ # not supposed to be possible, yet here we are
+ await conn.disconnect(nowait=True)
+ raise
finally:
await self.reset()