Upgrade to event-listener v3.0.0 (#43)
Signed-off-by: John Nunley <dev@notgull.net>
This commit is contained in:
parent
ac1c639e3e
commit
5e8e0b7c7b
|
@ -17,7 +17,7 @@ exclude = ["/.*"]
|
||||||
[dependencies]
|
[dependencies]
|
||||||
async-lock = "2.6.0"
|
async-lock = "2.6.0"
|
||||||
cfg-if = "1.0"
|
cfg-if = "1.0"
|
||||||
event-listener = "2.4.0"
|
event-listener = "3.0.0"
|
||||||
futures-lite = "1.11.0"
|
futures-lite = "1.11.0"
|
||||||
|
|
||||||
[target.'cfg(unix)'.dependencies]
|
[target.'cfg(unix)'.dependencies]
|
||||||
|
|
17
src/lib.rs
17
src/lib.rs
|
@ -75,7 +75,7 @@ use std::os::unix::io::{AsFd, AsRawFd, BorrowedFd, OwnedFd, RawFd};
|
||||||
use blocking::Unblock;
|
use blocking::Unblock;
|
||||||
|
|
||||||
use async_lock::OnceCell;
|
use async_lock::OnceCell;
|
||||||
use event_listener::Event;
|
use event_listener::{Event, EventListener};
|
||||||
use futures_lite::{future, io, prelude::*};
|
use futures_lite::{future, io, prelude::*};
|
||||||
|
|
||||||
#[doc(no_inline)]
|
#[doc(no_inline)]
|
||||||
|
@ -381,14 +381,21 @@ impl Child {
|
||||||
let child = self.child.clone();
|
let child = self.child.clone();
|
||||||
|
|
||||||
async move {
|
async move {
|
||||||
let mut listener = None;
|
let listener = EventListener::new(&SIGCHLD);
|
||||||
|
let mut listening = false;
|
||||||
|
futures_lite::pin!(listener);
|
||||||
|
|
||||||
loop {
|
loop {
|
||||||
if let Some(status) = child.lock().unwrap().get_mut().try_wait()? {
|
if let Some(status) = child.lock().unwrap().get_mut().try_wait()? {
|
||||||
return Ok(status);
|
return Ok(status);
|
||||||
}
|
}
|
||||||
match listener.take() {
|
|
||||||
None => listener = Some(SIGCHLD.listen()),
|
if listening {
|
||||||
Some(listener) => listener.await,
|
listener.as_mut().await;
|
||||||
|
listening = false;
|
||||||
|
} else {
|
||||||
|
listener.as_mut().listen();
|
||||||
|
listening = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue