diff --git a/src-tauri/src/component_manager.rs b/src-tauri/src/component_manager.rs index 69faa11..58bce57 100644 --- a/src-tauri/src/component_manager.rs +++ b/src-tauri/src/component_manager.rs @@ -84,6 +84,10 @@ pub async fn add_decoders(decoder_paths: Vec) -> AddedDecodersCount let mut added_decoders_count = 0; + // @TODO (?) New thread to prevent "Cannot start a runtime from within a runtime." + // when a call to a component fails / panics + // std::thread::spawn(move || { + // futures::executor::block_on(async move { for decoder_path in decoder_paths { if let Err(error) = add_decoder(&decoder_path).await { eprintln!("add_decoders error: {error:?}"); @@ -91,6 +95,8 @@ pub async fn add_decoders(decoder_paths: Vec) -> AddedDecodersCount added_decoders_count += 1; } } + // }) + // }).join().unwrap(); added_decoders_count } diff --git a/src-tauri/src/lib.rs b/src-tauri/src/lib.rs index 0d2df5b..fafbf88 100644 --- a/src-tauri/src/lib.rs +++ b/src-tauri/src/lib.rs @@ -91,22 +91,22 @@ async fn load_signal_and_get_timeline( // "Cannot start a runtime from within a runtime. This happens because a function (like `block_on`) attempted to block the current thread while the thread is being used to drive asynchronous tasks." // @TODO Workaround? Is it a problem only for non-Rust components? Is it needed only when there is a problem in the component (e.g. "`Err` value: wasm trap: cannot enter component instance"?) // let value = std::thread::spawn(move || { - // futures::executor::block_on(async move { - let decoders = component_manager::DECODERS.read().await; - let mut store_lock = component_manager::STORE.lock().await; - let mut store = store_lock.as_context_mut(); + // futures::executor::block_on(async move { + let decoders = component_manager::DECODERS.read().await; + let mut store_lock = component_manager::STORE.lock().await; + let mut store = store_lock.as_context_mut(); - for decoder in decoders.iter() { - value = decoder - .component_decoder_decoder() - .call_format_signal_value(&mut store, &value) - // @TODO Resolve panic when running non-Rust components: - // `Err` value: wasm trap: cannot enter component instance - // https://github.com/bytecodealliance/wasmtime/issues/8670 ? - .unwrap() - } - // value - // }) + for decoder in decoders.iter() { + value = decoder + .component_decoder_decoder() + .call_format_signal_value(&mut store, &value) + // @TODO Resolve panic when running non-Rust components: + // `Err` value: wasm trap: cannot enter component instance + // https://github.com/bytecodealliance/wasmtime/issues/8670 ? + .unwrap() + } + // value + // }) // }).join().unwrap(); value }) diff --git a/test_files/components/python_decoder/python_decoder.wasm b/test_files/components/python_decoder/python_decoder.wasm index be408cd..8e01a16 100644 Binary files a/test_files/components/python_decoder/python_decoder.wasm and b/test_files/components/python_decoder/python_decoder.wasm differ diff --git a/test_files/components/python_decoder/src/app.py b/test_files/components/python_decoder/src/app.py index fe8fe8a..30d6f57 100644 --- a/test_files/components/python_decoder/src/app.py +++ b/test_files/components/python_decoder/src/app.py @@ -5,7 +5,8 @@ name = "Python Test Decoder" class Decoder(exports.Decoder): def init(self) -> None: - # @TODO it panics for some reasons + # @TODO it panics with error `7: 0xae8683 - libcomponentize_py_runtime.so!componentize-py#Dispatch` + # - see https://github.com/bytecodealliance/componentize-py/blob/e20d9e6706ff1421cd8001449acb51eb9c87d0c6/runtime/src/lib.rs#L404 # host.log(f"{name} initialized") return None @@ -13,4 +14,4 @@ class Decoder(exports.Decoder): return name def format_signal_value(self, value: str) -> str: - return str + "!" + return value + "!"