Upgrade to event-listener v3.0.0

This commit is contained in:
jtnunley 2023-05-20 13:52:25 -07:00
parent 5e48a40d6c
commit 02b77f36a0
No known key found for this signature in database
GPG Key ID: 42B2FA4582BB1EC9
2 changed files with 13 additions and 6 deletions

View File

@ -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]

View File

@ -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;
}
}
}