[pbs-devel] [PATCH proxmox] async: runtime: fix `block_in_place` panicking in wrong runtime

Wolfgang Bumiller w.bumiller at proxmox.com
Fri Aug 18 09:26:44 CEST 2023


Does a single threaded runtime support `.spawn_blocking()`? Maybe it
would make sense to use that in this case?

Because this just seems a tiny bit dangerous.
Then again, `block_in_place` is the wrong helper if the blocking
operation also depends on any futures making progress, it should only be
used for independent operations... but that doesn't mean it can't
accidentally happen somehow...
Ideally we could get rid of all the block-in-place stuff without slowing
things down too much, but the latter part is difficult :-)

On Thu, Aug 17, 2023 at 06:46:37PM +0200, Max Carrara wrote:
> Because `tokio::task::block_in_place` panics if called in the
> "current_thread" runtime, so does our wrapper function.
> 
> This is fixed by checking whether we're actually in a multithreaded
> tokio runtime.
> 
> Signed-off-by: Max Carrara <m.carrara at proxmox.com>
> ---
>  proxmox-async/src/runtime.rs | 7 ++++++-
>  1 file changed, 6 insertions(+), 1 deletion(-)
> 
> diff --git a/proxmox-async/src/runtime.rs b/proxmox-async/src/runtime.rs
> index 0fe9fae..35cf7c3 100644
> --- a/proxmox-async/src/runtime.rs
> +++ b/proxmox-async/src/runtime.rs
> @@ -15,7 +15,12 @@ thread_local! {
>  }
> 
>  fn is_in_tokio() -> bool {
> -    tokio::runtime::Handle::try_current().is_ok()
> +    tokio::runtime::Handle::try_current().is_ok_and(|rt_handle| {
> +        matches!(
> +            rt_handle.runtime_flavor(),
> +            tokio::runtime::RuntimeFlavor::MultiThread
> +        )
> +    })
>  }
> 
>  fn is_blocking() -> bool {
> --
> 2.39.2





More information about the pbs-devel mailing list