m: Port to event-listener v5.0.0
cc smol-rs/event-listener#104 Signed-off-by: John Nunley <dev@notgull.net>
This commit is contained in:
parent
d23ab0b6a3
commit
35a77ff266
|
@ -17,7 +17,7 @@ exclude = ["/.*"]
|
||||||
[dependencies]
|
[dependencies]
|
||||||
async-lock = "3.0.0"
|
async-lock = "3.0.0"
|
||||||
cfg-if = "1.0"
|
cfg-if = "1.0"
|
||||||
event-listener = "4.0.0"
|
event-listener = "5.0.0"
|
||||||
futures-lite = "2.0.0"
|
futures-lite = "2.0.0"
|
||||||
|
|
||||||
[target.'cfg(unix)'.dependencies]
|
[target.'cfg(unix)'.dependencies]
|
||||||
|
|
22
src/lib.rs
22
src/lib.rs
|
@ -76,7 +76,7 @@ use std::os::unix::io::{AsFd, AsRawFd, BorrowedFd, OwnedFd, RawFd};
|
||||||
use blocking::Unblock;
|
use blocking::Unblock;
|
||||||
|
|
||||||
use async_lock::{Mutex as AsyncMutex, OnceCell};
|
use async_lock::{Mutex as AsyncMutex, OnceCell};
|
||||||
use event_listener::{Event, EventListener};
|
use event_listener::Event;
|
||||||
use futures_lite::{future, io, prelude::*};
|
use futures_lite::{future, io, prelude::*};
|
||||||
|
|
||||||
#[doc(no_inline)]
|
#[doc(no_inline)]
|
||||||
|
@ -510,22 +510,22 @@ impl Child {
|
||||||
let child = self.child.clone();
|
let child = self.child.clone();
|
||||||
|
|
||||||
async move {
|
async move {
|
||||||
let listener = EventListener::new();
|
|
||||||
let mut listening = false;
|
|
||||||
futures_lite::pin!(listener);
|
|
||||||
|
|
||||||
loop {
|
loop {
|
||||||
|
// Wait on the child process.
|
||||||
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);
|
||||||
}
|
}
|
||||||
|
|
||||||
if listening {
|
// Start listening.
|
||||||
listener.as_mut().await;
|
event_listener::listener!(Reaper::get().sigchld => listener);
|
||||||
listening = false;
|
|
||||||
} else {
|
// Try again.
|
||||||
listener.as_mut().listen(&Reaper::get().sigchld);
|
if let Some(status) = child.lock().unwrap().get_mut().try_wait()? {
|
||||||
listening = true;
|
return Ok(status);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Wait on the listener.
|
||||||
|
listener.await;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue