diff options
author | Chayim <chayim@users.noreply.github.com> | 2023-03-22 18:04:01 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-03-22 18:04:01 +0200 |
commit | b3c89acd0ffe8303649ad8207bc911b1d6a033eb (patch) | |
tree | 8a2bf6473ab828e9542b2ebe493254831db74d3e /redis/asyncio/client.py | |
parent | 8592cacf9e5069f8f6d392a2bc02aeade87c9d69 (diff) | |
download | redis-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.py | 12 |
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() |