diff --git a/pymongo/asynchronous/mongo_client.py b/pymongo/asynchronous/mongo_client.py index e347e1de56..a0f1397a4d 100644 --- a/pymongo/asynchronous/mongo_client.py +++ b/pymongo/asynchronous/mongo_client.py @@ -2752,8 +2752,10 @@ async def __aexit__( try: await self.handle(exc_type, exc_val) finally: - if self._pool_checkout is not None: - await self._pool_checkout.__aexit__(exc_type, exc_val, exc_tb) + pool_checkout = self._pool_checkout + self._pool_checkout = None # to break the reference cycle before cleanup can raise + if pool_checkout is not None: + await pool_checkout.__aexit__(exc_type, exc_val, exc_tb) @classmethod def for_existing_conn( diff --git a/pymongo/synchronous/mongo_client.py b/pymongo/synchronous/mongo_client.py index 71ba6dd181..574fbc00de 100644 --- a/pymongo/synchronous/mongo_client.py +++ b/pymongo/synchronous/mongo_client.py @@ -2741,8 +2741,10 @@ def __exit__( try: self.handle(exc_type, exc_val) finally: - if self._pool_checkout is not None: - self._pool_checkout.__exit__(exc_type, exc_val, exc_tb) + pool_checkout = self._pool_checkout + self._pool_checkout = None # to break the reference cycle before cleanup can raise + if pool_checkout is not None: + pool_checkout.__exit__(exc_type, exc_val, exc_tb) @classmethod def for_existing_conn(