From 190937fe95cb9670b46c3ec919761b0ef4a28db4 Mon Sep 17 00:00:00 2001 From: John Nunley Date: Tue, 26 Dec 2023 08:17:20 -0800 Subject: [PATCH] Port to event-listener v5.0.0 cc smol-rs/event-listener#104 Signed-off-by: John Nunley --- Cargo.toml | 5 ++++- src/lib.rs | 22 +++++++++++----------- 2 files changed, 15 insertions(+), 12 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index 7fcce67..71d2fab 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -17,7 +17,7 @@ exclude = ["/.*"] [dependencies] async-lock = "3.0.0" cfg-if = "1.0" -event-listener = "4.0.0" +event-listener = "4.0.1" futures-lite = "2.0.0" [target.'cfg(unix)'.dependencies] @@ -40,3 +40,6 @@ features = [ [dev-dependencies] async-executor = "1.5.1" async-io = "2.1.0" + +[patch.crates-io] +event-listener = { git = "https://github.com/smol-rs/event-listener", branch = "notgull/break" } diff --git a/src/lib.rs b/src/lib.rs index 361c0bd..5fd618f 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -76,7 +76,7 @@ use std::os::unix::io::{AsFd, AsRawFd, BorrowedFd, OwnedFd, RawFd}; use blocking::Unblock; use async_lock::{Mutex as AsyncMutex, OnceCell}; -use event_listener::{Event, EventListener}; +use event_listener::Event; use futures_lite::{future, io, prelude::*}; #[doc(no_inline)] @@ -510,22 +510,22 @@ impl Child { let child = self.child.clone(); async move { - let listener = EventListener::new(); - let mut listening = false; - futures_lite::pin!(listener); - loop { + // Wait on the child process. if let Some(status) = child.lock().unwrap().get_mut().try_wait()? { return Ok(status); } - if listening { - listener.as_mut().await; - listening = false; - } else { - listener.as_mut().listen(&Reaper::get().sigchld); - listening = true; + // Start listening. + event_listener::listener!(Reaper::get().sigchld => listener); + + // Try again. + if let Some(status) = child.lock().unwrap().get_mut().try_wait()? { + return Ok(status); } + + // Wait on the listener. + listener.await; } } }