From 361ea289526d3737fabd857dd7c6c895f9f89532 Mon Sep 17 00:00:00 2001 From: Abraham Egnor Date: Fri, 14 Nov 2025 11:52:35 +0000 Subject: [PATCH 1/2] focused fix --- driver/src/client.rs | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/driver/src/client.rs b/driver/src/client.rs index c0ef225d6..41f97c762 100644 --- a/driver/src/client.rs +++ b/driver/src/client.rs @@ -550,10 +550,12 @@ impl Client { watcher.request_immediate_check(); - let change_occurred = start_time.elapsed() < timeout - && watcher - .wait_for_update(timeout - start_time.elapsed()) - .await; + let elapsed = start_time.elapsed(); + let change_occurred = elapsed < timeout + && match timeout.checked_sub(elapsed) { + Some(remaining) => watcher.wait_for_update(remaining).await, + None => false, + }; if !change_occurred { let error: Error = ErrorKind::ServerSelection { message: state From e2d1670847eb46ca25d99ef3860d336d0103e8b9 Mon Sep 17 00:00:00 2001 From: Abraham Egnor Date: Fri, 14 Nov 2025 12:13:26 +0000 Subject: [PATCH 2/2] revised fix --- driver/src/client.rs | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/driver/src/client.rs b/driver/src/client.rs index 41f97c762..3f43725f0 100644 --- a/driver/src/client.rs +++ b/driver/src/client.rs @@ -552,10 +552,11 @@ impl Client { let elapsed = start_time.elapsed(); let change_occurred = elapsed < timeout - && match timeout.checked_sub(elapsed) { - Some(remaining) => watcher.wait_for_update(remaining).await, - None => false, - }; + && watcher + .wait_for_update( + timeout.checked_sub(elapsed).unwrap_or(Duration::ZERO), + ) + .await; if !change_occurred { let error: Error = ErrorKind::ServerSelection { message: state @@ -615,10 +616,10 @@ impl Client { if let Some(desc) = topology.description.primary() { return Some(desc.clone()); } - if !watcher - .wait_for_update(timeout - start_time.elapsed()) - .await - { + let remaining = timeout + .checked_sub(start_time.elapsed()) + .unwrap_or(Duration::ZERO); + if !watcher.wait_for_update(remaining).await { return None; } }