From 02b77f36a0437f5d5a6ccf404ebd544c7d5be2c4 Mon Sep 17 00:00:00 2001 From: jtnunley Date: Sat, 20 May 2023 13:52:25 -0700 Subject: [PATCH] Upgrade to event-listener v3.0.0 --- Cargo.toml | 2 +- src/lib.rs | 17 ++++++++++++----- 2 files changed, 13 insertions(+), 6 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index fd05bff..30e8a07 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -17,7 +17,7 @@ exclude = ["/.*"] [dependencies] async-lock = "2.6.0" cfg-if = "1.0" -event-listener = "2.4.0" +event-listener = { git = "https://github.com/smol-rs/event-listener" } futures-lite = "1.11.0" [build-dependencies] diff --git a/src/lib.rs b/src/lib.rs index 0b7e59e..f9f3727 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -71,7 +71,7 @@ use std::os::unix::io::{AsRawFd, RawFd}; use blocking::Unblock; use async_lock::OnceCell; -use event_listener::Event; +use event_listener::{Event, EventListener}; use futures_lite::{future, io, prelude::*}; #[doc(no_inline)] @@ -370,14 +370,21 @@ impl Child { let child = self.child.clone(); async move { - let mut listener = None; + let listener = EventListener::new(&SIGCHLD); + let mut listening = false; + futures_lite::pin!(listener); + loop { if let Some(status) = child.lock().unwrap().get_mut().try_wait()? { return Ok(status); } - match listener.take() { - None => listener = Some(SIGCHLD.listen()), - Some(listener) => listener.await, + + if listening { + listener.as_mut().await; + listening = false; + } else { + listener.as_mut().listen(); + listening = true; } } }