diff --git a/crates/wasi-common/cap-std-sync/src/sched/windows.rs b/crates/wasi-common/cap-std-sync/src/sched/windows.rs index 135ec7b4a0..41f3f1dda3 100644 --- a/crates/wasi-common/cap-std-sync/src/sched/windows.rs +++ b/crates/wasi-common/cap-std-sync/src/sched/windows.rs @@ -25,12 +25,13 @@ use wasi_common::{ }; pub async fn poll_oneoff<'a>(poll: &mut Poll<'a>) -> Result<(), Error> { - poll_oneoff_(poll, wasi_file_raw_handle).await + poll_oneoff_(poll, wasi_file_is_stdin, wasi_file_raw_handle).await } // For reuse by wasi-tokio, which has a different WasiFile -> RawHandle translator. pub async fn poll_oneoff_<'a>( poll: &mut Poll<'a>, + file_is_stdin: impl Fn(&dyn WasiFile) -> bool, file_to_handle: impl Fn(&dyn WasiFile) -> Option, ) -> Result<(), Error> { if poll.is_empty() { @@ -58,7 +59,7 @@ pub async fn poll_oneoff_<'a>( for s in poll.rw_subscriptions() { match s { Subscription::Read(r) => { - if r.file.as_any().is::() { + if file_is_stdin(r.file.deref()) { stdin_read_subs.push(r); } else if file_to_handle(r.file.deref()).is_some() { immediate_reads.push(r); @@ -69,7 +70,7 @@ pub async fn poll_oneoff_<'a>( } } Subscription::Write(w) => { - if wasi_file_raw_handle(w.file.deref()).is_some() { + if file_to_handle(w.file.deref()).is_some() { immediate_writes.push(w); } else { return Err( @@ -133,6 +134,11 @@ pub async fn poll_oneoff_<'a>( Ok(()) } + +pub fn wasi_file_is_stdin(f: &dyn WasiFile) -> bool { + f.as_any().is::() +} + pub fn wasi_file_raw_handle(f: &dyn WasiFile) -> Option { let a = f.as_any(); if a.is::() { diff --git a/crates/wasi-common/tokio/src/sched/windows.rs b/crates/wasi-common/tokio/src/sched/windows.rs index d962675f45..90b33aeb47 100644 --- a/crates/wasi-common/tokio/src/sched/windows.rs +++ b/crates/wasi-common/tokio/src/sched/windows.rs @@ -8,7 +8,11 @@ pub async fn poll_oneoff<'a>(poll: &mut Poll<'a>) -> Result<(), Error> { // we use the blocking poll_oneoff implementation from the wasi-cap-std-crate. // We provide a function specific to this crate's WasiFile types for downcasting // to a RawHandle. - block_on_dummy_executor(move || poll_oneoff_(poll, wasi_file_raw_handle)) + block_on_dummy_executor(move || poll_oneoff_(poll, wasi_file_is_stdin, wasi_file_raw_handle)) +} + +pub fn wasi_file_is_stdin(f: &dyn WasiFile) -> bool { + f.as_any().is::() } fn wasi_file_raw_handle(f: &dyn WasiFile) -> Option {