From 59ce56adbee7618e2b5bbcdbd3b937e617fa1e2a Mon Sep 17 00:00:00 2001 From: Steven Silvester Date: Mon, 9 Jun 2025 19:36:44 -0500 Subject: [PATCH] PYTHON-5405 Use legacy wait_for_read cancellation approach on Windows (#2363) (cherry picked from commit 0dd5a5c794e2544096cf3e57801e331873f26f8e) --- pymongo/network_layer.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/pymongo/network_layer.py b/pymongo/network_layer.py index 6f1bb9a357..78eefc7177 100644 --- a/pymongo/network_layer.py +++ b/pymongo/network_layer.py @@ -286,6 +286,7 @@ async def _async_socket_receive( _PYPY = "PyPy" in sys.version +_WINDOWS = sys.platform == "win32" def wait_for_read(conn: Connection, deadline: Optional[float]) -> None: @@ -337,7 +338,8 @@ def receive_data(conn: Connection, length: int, deadline: Optional[float]) -> me while bytes_read < length: try: # Use the legacy wait_for_read cancellation approach on PyPy due to PYTHON-5011. - if _PYPY: + # also use it on Windows due to PYTHON-5405 + if _PYPY or _WINDOWS: wait_for_read(conn, deadline) if _csot.get_timeout() and deadline is not None: conn.set_conn_timeout(max(deadline - time.monotonic(), 0)) @@ -359,6 +361,7 @@ def receive_data(conn: Connection, length: int, deadline: Optional[float]) -> me raise _OperationCancelled("operation cancelled") from None if ( _PYPY + or _WINDOWS or not conn.is_sdam and deadline is not None and deadline - time.monotonic() < 0