qemu-rust
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [PATCH v2 04/11] rust/qemu-api: Add wrappers to run futures in QEMU


From: Kevin Wolf
Subject: Re: [PATCH v2 04/11] rust/qemu-api: Add wrappers to run futures in QEMU
Date: Thu, 20 Feb 2025 15:58:09 +0100

Am 20.02.2025 um 07:35 hat Zhao Liu geschrieben:
> > +/// Use QEMU's event loops to run a Rust [`Future`] to completion and 
> > return its result.
> > +///
> > +/// This function must be called in coroutine context. If the future isn't 
> > ready yet, it yields.
> > +pub fn qemu_co_run_future<F: Future>(future: F) -> F::Output {
> > +    let waker = Waker::from(Arc::new(RunFutureWaker {
> > +        co: unsafe { bindings::qemu_coroutine_self() },
> > +    }));
> > +    let mut cx = Context::from_waker(&waker);
> > +
> > +    let mut pinned_future = std::pin::pin!(future);
> 
> pin macro stabilized in v1.68.0, but currently the minimum rustc
> supported by QEMU is v1.63.

Can we check this automatically somehow? I actually seem to remember
that I got errors for too new things before. Is the problem here that
it's a macro?

> I found there's a workaround [*], so we can add a temporary pin.rs in
> qemu_api until QEMU bumps up rustc to >= v1.68?
> 
> [*]: https://github.com/rust-lang/rust/issues/93178#issuecomment-1386177439

I don't think we'll need this anywhere else, so I can just open-code
what the macro does:

    // TODO Use std::pin::pin! when MSRV is updated to at least 1.68.0
    // SAFETY: `future` is not used any more after this and dropped at the end 
of the function.
    let mut pinned_future = unsafe { std::pin::Pin::new_unchecked(&mut future)};

Kevin




reply via email to

[Prev in Thread] Current Thread [Next in Thread]