From ac4f86699dcf690103a6933df96ea561d56ef296 Mon Sep 17 00:00:00 2001 From: Andrei Sauchanka Date: Wed, 16 Nov 2022 16:24:02 +0200 Subject: [PATCH] Fix pyodbc.ProgrammingError: Attempt to use a closed connection. --- aioodbc/pool.py | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/aioodbc/pool.py b/aioodbc/pool.py index cb9a061..648808d 100644 --- a/aioodbc/pool.py +++ b/aioodbc/pool.py @@ -4,7 +4,10 @@ import asyncio import collections +from pyodbc import ProgrammingError + from .connection import connect +from .log import logger from .utils import _PoolContextManager, _PoolConnectionContextManager __all__ = ['create_pool', 'Pool'] @@ -137,7 +140,16 @@ async def _fill_free_pool(self, override_min): conn = self._free[-1] if self._recycle > -1 \ and self._loop.time() - conn.last_usage > self._recycle: - await conn.close() + + try: + if not conn.closed: + await conn.close() + except ProgrammingError as e: + # Sometimes conn.closed is False even if connection has been already closed + # (ex. for impala driver clouderaimpalaodbc_2.6.16.1022-2_amd64.deb). + # conn.close() will raise ProgrammingError in this case. + logger.warning(e) + self._free.pop() else: self._free.rotate()