diff --git a/crates/wasi-common/cap-std-sync/src/sched/unix.rs b/crates/wasi-common/cap-std-sync/src/sched/unix.rs index abf0338b1e..94a8614a60 100644 --- a/crates/wasi-common/cap-std-sync/src/sched/unix.rs +++ b/crates/wasi-common/cap-std-sync/src/sched/unix.rs @@ -22,7 +22,7 @@ impl SyncSched { #[wiggle::async_trait] impl WasiSched for SyncSched { - async fn poll_oneoff<'a>(&self, poll: &'a Poll<'a>) -> Result<(), Error> { + async fn poll_oneoff<'a>(&self, poll: &mut Poll<'a>) -> Result<(), Error> { if poll.is_empty() { return Ok(()); } diff --git a/crates/wasi-common/src/sched.rs b/crates/wasi-common/src/sched.rs index e437f48727..d8be4deb99 100644 --- a/crates/wasi-common/src/sched.rs +++ b/crates/wasi-common/src/sched.rs @@ -9,7 +9,7 @@ use subscription::{MonotonicClockSubscription, RwSubscription, Subscription, Sub #[wiggle::async_trait] pub trait WasiSched { - async fn poll_oneoff<'a>(&self, poll: &'a Poll<'a>) -> Result<(), Error>; + async fn poll_oneoff<'a>(&self, poll: &mut Poll<'a>) -> Result<(), Error>; async fn sched_yield(&self) -> Result<(), Error>; async fn sleep(&self, duration: Duration) -> Result<(), Error>; } @@ -62,16 +62,16 @@ impl<'a> Poll<'a> { self.subs .push((Subscription::Write(RwSubscription::new(file)), ud)); } - pub fn results(&self) -> Vec<(SubscriptionResult, Userdata)> { + pub fn results(self) -> Vec<(SubscriptionResult, Userdata)> { self.subs - .iter() - .filter_map(|(s, ud)| SubscriptionResult::from_subscription(s).map(|r| (r, *ud))) + .into_iter() + .filter_map(|(s, ud)| SubscriptionResult::from_subscription(s).map(|r| (r, ud))) .collect() } pub fn is_empty(&self) -> bool { self.subs.is_empty() } - pub fn earliest_clock_deadline(&'a self) -> Option<&MonotonicClockSubscription<'a>> { + pub fn earliest_clock_deadline(&self) -> Option<&MonotonicClockSubscription<'a>> { self.subs .iter() .filter_map(|(s, _ud)| match s { @@ -80,8 +80,8 @@ impl<'a> Poll<'a> { }) .min_by(|a, b| a.deadline.cmp(&b.deadline)) } - pub fn rw_subscriptions(&'a self) -> impl Iterator> { - self.subs.iter().filter_map(|(s, _ud)| match s { + pub fn rw_subscriptions<'b>(&'b mut self) -> impl Iterator> { + self.subs.iter_mut().filter_map(|(s, _ud)| match s { Subscription::Read { .. } | Subscription::Write { .. } => Some(s), _ => None, }) diff --git a/crates/wasi-common/src/sched/subscription.rs b/crates/wasi-common/src/sched/subscription.rs index d333b74391..d49c646cfe 100644 --- a/crates/wasi-common/src/sched/subscription.rs +++ b/crates/wasi-common/src/sched/subscription.rs @@ -69,7 +69,7 @@ pub enum SubscriptionResult { } impl SubscriptionResult { - pub fn from_subscription(s: &Subscription) -> Option { + pub fn from_subscription(s: Subscription) -> Option { match s { Subscription::Read(s) => s.result().map(SubscriptionResult::Read), Subscription::Write(s) => s.result().map(SubscriptionResult::Write), diff --git a/crates/wasi-common/src/snapshots/preview_0.rs b/crates/wasi-common/src/snapshots/preview_0.rs index f933dfb04d..6eff280a47 100644 --- a/crates/wasi-common/src/snapshots/preview_0.rs +++ b/crates/wasi-common/src/snapshots/preview_0.rs @@ -849,7 +849,7 @@ impl wasi_unstable::WasiUnstable for WasiCtx { } } - self.sched.poll_oneoff(&poll).await?; + self.sched.poll_oneoff(&mut poll).await?; let results = poll.results(); let num_results = results.len(); diff --git a/crates/wasi-common/src/snapshots/preview_1.rs b/crates/wasi-common/src/snapshots/preview_1.rs index 2350e8663b..553066628b 100644 --- a/crates/wasi-common/src/snapshots/preview_1.rs +++ b/crates/wasi-common/src/snapshots/preview_1.rs @@ -1047,7 +1047,7 @@ impl wasi_snapshot_preview1::WasiSnapshotPreview1 for WasiCtx { poll.subscribe_write(f.deref_mut(), *ud); } - self.sched.poll_oneoff(&poll).await?; + self.sched.poll_oneoff(&mut poll).await?; let results = poll.results(); let num_results = results.len();