Upgrade to event-listener v3.0.0
This commit is contained in:
parent
5e48a40d6c
commit
02b77f36a0
|
@ -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]
|
||||
|
|
17
src/lib.rs
17
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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue