From d4a5e02e8433db156b9dabe2b81ddd1d2aca9ea6 Mon Sep 17 00:00:00 2001 From: Ogulcan Celik Date: Mon, 25 May 2026 15:36:50 +0300 Subject: feat: hand off ptys during updates --- tests/support/mod.rs | 30 ++++++++++++++++++++++-------- 1 file changed, 22 insertions(+), 8 deletions(-) (limited to 'tests/support') diff --git a/tests/support/mod.rs b/tests/support/mod.rs index e810b843..cae140c9 100644 --- a/tests/support/mod.rs +++ b/tests/support/mod.rs @@ -328,16 +328,30 @@ pub fn wait_for_message_variant( } pub fn wait_for_disconnect(stream: &mut UnixStream, timeout: Duration) -> Result { - stream - .set_read_timeout(Some(Duration::from_millis(200))) - .map_err(|e| e.to_string())?; + stream.set_nonblocking(true).map_err(|e| e.to_string())?; let deadline = Instant::now() + timeout; - while Instant::now() < deadline { - if read_server_message(stream).is_err() { - return Ok(true); + let mut idle_since = None; + let result = loop { + match read_server_message(stream) { + Ok(_) => idle_since = None, + Err(err) + if err.to_ascii_lowercase().contains("would block") + || err.contains("Resource temporarily unavailable") => + { + let idle_started = *idle_since.get_or_insert_with(Instant::now); + if idle_started.elapsed() >= Duration::from_millis(200) { + break Ok(true); + } + } + Err(_) => break Ok(true), } - } - Ok(false) + if Instant::now() >= deadline { + break Ok(false); + } + thread::sleep(Duration::from_millis(25)); + }; + let _ = stream.set_nonblocking(false); + result } pub fn cleanup_registered_herdr_pids() { -- cgit v1.2.3