Skip to content

Commit 2303a8e

Browse files
committed
check linux cleanup
1 parent 0e290a1 commit 2303a8e

File tree

1 file changed

+25
-6
lines changed

1 file changed

+25
-6
lines changed

mssql_python/cursor.py

Lines changed: 25 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -564,10 +564,19 @@ def _reset_cursor(self) -> None:
564564
"""
565565
Reset the DDBC statement handle.
566566
"""
567+
# Clear cache references before resetting
568+
self._cached_column_map = None
569+
self._cached_converter_map = None
570+
567571
if self.hstmt:
568-
self.hstmt.free()
569-
self.hstmt = None
570-
log("debug", "SQLFreeHandle succeeded")
572+
try:
573+
self.hstmt.free()
574+
self.hstmt = None
575+
log("debug", "SQLFreeHandle succeeded")
576+
except Exception as e: # pylint: disable=broad-exception-caught
577+
# Handle case where connection might already be closed
578+
log("warning", "Error freeing statement handle during reset: %s", e)
579+
self.hstmt = None
571580

572581
self._clear_rownumber()
573582

@@ -590,6 +599,10 @@ def close(self) -> None:
590599
# Clear messages per DBAPI
591600
self.messages = []
592601

602+
# Clear cache references before cleanup to prevent issues during connection close
603+
self._cached_column_map = None
604+
self._cached_converter_map = None
605+
593606
# Remove this cursor from the connection's tracking
594607
if (
595608
hasattr(self, "connection")
@@ -602,9 +615,15 @@ def close(self) -> None:
602615
log("warning", "Error removing cursor from connection tracking: %s", e)
603616

604617
if self.hstmt:
605-
self.hstmt.free()
606-
self.hstmt = None
607-
log("debug", "SQLFreeHandle succeeded")
618+
try:
619+
self.hstmt.free()
620+
self.hstmt = None
621+
log("debug", "SQLFreeHandle succeeded")
622+
except Exception as e: # pylint: disable=broad-exception-caught
623+
# On Linux, freeing statement handles after connection is closed can hang
624+
# Log the error but don't propagate to avoid hangs
625+
log("warning", "Error freeing statement handle (connection may be closed): %s", e)
626+
self.hstmt = None
608627
self._clear_rownumber()
609628
self.closed = True
610629

0 commit comments

Comments
 (0)