Add armed file watches without serializing unrelated IO
This commit is contained in:
committed by
SAU-431 implementer
parent
959ddf46ff
commit
a95b5287cf
+16
-1
@@ -36,7 +36,22 @@ impl Process {
|
||||
.await
|
||||
.map_err(std::io::Error::other)?
|
||||
}
|
||||
/// Wait for all outstanding system calls.
|
||||
/// Complete an asynchronous mutation and its observation even if the guest is cancelled.
|
||||
/// Its guard participates in idle(), so no mutation outlives process cleanup.
|
||||
pub async fn operation<T: Send + 'static>(
|
||||
&self,
|
||||
operation: impl std::future::Future<Output = std::io::Result<T>> + Send + 'static,
|
||||
) -> std::io::Result<T> {
|
||||
self.0.count.fetch_add(1, Ordering::SeqCst);
|
||||
let guard = Guard(self.0.clone());
|
||||
tokio::spawn(async move {
|
||||
let _guard = guard;
|
||||
operation.await
|
||||
})
|
||||
.await
|
||||
.map_err(std::io::Error::other)?
|
||||
}
|
||||
/// Wait for all outstanding system calls and observed mutations.
|
||||
/// First abort the guest task. Then await its JoinHandle, or drop its store.
|
||||
/// Only then await idle before releasing locks. Abort alone does not stop a running poll.
|
||||
/// This ordering also prevents later memory writes, which need no blocking guard.
|
||||
|
||||
Reference in New Issue
Block a user