diff --git a/pymongo/asynchronous/pool.py b/pymongo/asynchronous/pool.py index b93230982..2c543cbe2 100644 --- a/pymongo/asynchronous/pool.py +++ b/pymongo/asynchronous/pool.py @@ -964,9 +964,12 @@ class Pool: if self.opts.max_idle_time_seconds is not None: close_conns = [] - conns = self.conns.copy() - while conns and conns[-1].idle_time_seconds() > self.opts.max_idle_time_seconds: - close_conns.append(conns.pop()) + async with self.lock: + while ( + self.conns + and self.conns[-1].idle_time_seconds() > self.opts.max_idle_time_seconds + ): + close_conns.append(self.conns.pop()) if not _IS_SYNC: await asyncio.gather( *[conn.close_conn(ConnectionClosedReason.IDLE) for conn in close_conns], # type: ignore[func-returns-value] diff --git a/pymongo/synchronous/pool.py b/pymongo/synchronous/pool.py index 89730c21c..cb469e427 100644 --- a/pymongo/synchronous/pool.py +++ b/pymongo/synchronous/pool.py @@ -960,9 +960,12 @@ class Pool: if self.opts.max_idle_time_seconds is not None: close_conns = [] - conns = self.conns.copy() - while conns and conns[-1].idle_time_seconds() > self.opts.max_idle_time_seconds: - close_conns.append(conns.pop()) + with self.lock: + while ( + self.conns + and self.conns[-1].idle_time_seconds() > self.opts.max_idle_time_seconds + ): + close_conns.append(self.conns.pop()) if not _IS_SYNC: asyncio.gather( *[conn.close_conn(ConnectionClosedReason.IDLE) for conn in close_conns], # type: ignore[func-returns-value]