Stream: git-wasmtime

Topic: wasmtime / issue #7273 Calling `call_async` on a `TypedFu...


view this post on Zulip Wasmtime GitHub notifications bot (Oct 17 2023 at 20:57):

drogus added the bug label to Issue #7273.

view this post on Zulip Wasmtime GitHub notifications bot (Oct 17 2023 at 20:57):

drogus opened issue #7273:

I'm running a Tokio async Wasmtime example and I was trying to call a WASM function multiple times. When called more than once a TypedFunc panics.

Steps to Reproduce

In the tokio example one has to change the code to call the function to sth like:

    let func = instance
        .clone()
        .get_typed_func::<(), ()>(&mut store, "_start")?;
    for i in 1..10 {
        println!("{i}");

        func.call_async(&mut store, ()).await?;
    }

Expected Results

If it's possible to call a function multiple times it should not panic and allow it.

If it's not possible to call a function multiple times the call_async method should consume the function to not allow to call it again.

Actual Results

Error: error while executing at wasm backtrace:
    0:  0x2e3 - <unknown>!_start
note: using the `WASMTIME_BACKTRACE_DETAILS=1` environment variable may show more debugging information

Caused by:
    wasm trap: wasm `unreachable` instruction executed

Versions and Environment

tokio = { version = "1.20", features = ["full"] }
wasmtime = "13"
anyhow = "1"
wasmtime-wasi = { version = "13", features = ["tokio"] }
wasi-common = "13.0.0"

Operating system: Mac OSX

Architecture: Arm64

Extra Info

I'd be happy to provide a fix, but I'm not sure which way is correct: do not allow to call a function multiple times or allow it and thus fix the call.

view this post on Zulip Wasmtime GitHub notifications bot (Oct 17 2023 at 21:13):

drogus edited issue #7273:

I'm running a Tokio async Wasmtime example and I was trying to call a WASM function multiple times. When called more than once a TypedFunc panics.

Steps to Reproduce

In the tokio example one has to change the code to call the function to sth like:

    let func = instance
        .clone()
        .get_typed_func::<(), ()>(&mut store, "_start")?;
    for i in 1..10 {
        println!("{i}");

        func.call_async(&mut store, ()).await?;
    }

Expected Results

If it's possible to call a function multiple times it should not panic and allow it.

If it's not possible to call a function multiple times the call_async method should consume the function to not allow to call it again.

Actual Results

Error: error while executing at wasm backtrace:
    0:  0x2e3 - <unknown>!_start
note: using the `WASMTIME_BACKTRACE_DETAILS=1` environment variable may show more debugging information

Caused by:
    wasm trap: wasm `unreachable` instruction executed

Versions and Environment

tokio = { version = "1.20", features = ["full"] }
wasmtime = "13"
anyhow = "1"
wasmtime-wasi = { version = "13", features = ["tokio"] }
wasi-common = "13.0.0"

Update: happens also when using git for dependencies

Operating system: Mac OSX

Architecture: Arm64

Extra Info

I'd be happy to provide a fix, but I'm not sure which way is correct: do not allow to call a function multiple times or allow it and thus fix the call.

view this post on Zulip Wasmtime GitHub notifications bot (Oct 17 2023 at 21:24):

drogus commented on issue #7273:

I was talking with @RReverser and he pointed out that _start has a bunch of stuff generated into it when compiling to wasm32-wasi, so I guess it's not strictly a Wasmtime issue. That said, if you think some kind of a check to make the error more friendly sounds good, I'd be happy to provide the implementation.

view this post on Zulip Wasmtime GitHub notifications bot (Oct 17 2023 at 21:24):

drogus edited a comment on issue #7273:

I was talking with @RReverser and he pointed out that _start has a bunch of stuff generated into it when compiling to wasm32-wasi, so I guess it's not strictly a Wasmtime issue. Ie. I've checked an exported function and it works fine. That said, if you think some kind of a check to make the error more friendly sounds good, I'd be happy to provide the implementation.

view this post on Zulip Wasmtime GitHub notifications bot (Oct 17 2023 at 21:39):

RReverser commented on issue #7273:

Yeah I don't think this is Wasmtime issue - the compiled code just has an assertion to make sure it's initialized only once, and isn't supposed to be called multiple times. Same could happen with any other exported function, it's entirely up to specific Wasm.

view this post on Zulip Wasmtime GitHub notifications bot (Oct 18 2023 at 00:24):

drogus closed issue #7273:

I'm running a Tokio async Wasmtime example and I was trying to call a WASM function multiple times. When called more than once a TypedFunc panics.

Steps to Reproduce

In the tokio example one has to change the code to call the function to sth like:

    let func = instance
        .clone()
        .get_typed_func::<(), ()>(&mut store, "_start")?;
    for i in 1..10 {
        println!("{i}");

        func.call_async(&mut store, ()).await?;
    }

Expected Results

If it's possible to call a function multiple times it should not panic and allow it.

If it's not possible to call a function multiple times the call_async method should consume the function to not allow to call it again.

Actual Results

Error: error while executing at wasm backtrace:
    0:  0x2e3 - <unknown>!_start
note: using the `WASMTIME_BACKTRACE_DETAILS=1` environment variable may show more debugging information

Caused by:
    wasm trap: wasm `unreachable` instruction executed

Versions and Environment

tokio = { version = "1.20", features = ["full"] }
wasmtime = "13"
anyhow = "1"
wasmtime-wasi = { version = "13", features = ["tokio"] }
wasi-common = "13.0.0"

Update: happens also when using git for dependencies

Operating system: Mac OSX

Architecture: Arm64

Extra Info

I'd be happy to provide a fix, but I'm not sure which way is correct: do not allow to call a function multiple times or allow it and thus fix the call.


Last updated: Dec 23 2024 at 13:07 UTC