diff --git a/source/extensions/common/wasm/wasm.cc b/source/extensions/common/wasm/wasm.cc index 70e8327181cf..66f761174bbd 100644 --- a/source/extensions/common/wasm/wasm.cc +++ b/source/extensions/common/wasm/wasm.cc @@ -807,7 +807,6 @@ bool Context::isSsl() { return decoder_callbacks_->connection()->ssl() != nullpt // Calls into the WASM code. // void Context::onStart() { - wasm_->wasmVm()->start(this); if (wasm_->onStart_) { wasm_->onStart_(this); } @@ -1032,6 +1031,8 @@ bool Wasm::initialize(const std::string& code, absl::string_view name, bool allo auto ok = wasm_vm_->initialize(code, name, allow_precompiled); if (!ok) return false; + general_context_ = createContext(); + wasm_vm_->start(general_context_.get()); code_ = code; allow_precompiled_ = allow_precompiled; getFunctions(); @@ -1255,6 +1256,7 @@ std::shared_ptr createThreadLocalWasm(Wasm& base_wasm, absl::string_view c wasm->configure(base_wasm.initial_configuration()); } wasm->configure(configuration); + wasm->start(); if (!wasm->id().empty()) local_wasms[wasm->id()] = wasm; return wasm; diff --git a/source/extensions/common/wasm/wavm/wavm.cc b/source/extensions/common/wasm/wavm/wavm.cc index 4d283a94d5f3..c07f5fb41c57 100644 --- a/source/extensions/common/wasm/wavm/wavm.cc +++ b/source/extensions/common/wasm/wavm/wavm.cc @@ -437,7 +437,7 @@ void getFunctionWavmReturn(WasmVm* vm, absl::string_view functionName, throw WasmVmException(fmt::format("Bad function signature for: {}", functionName)); } *function = [wavm, f](Context* context, Args... args) -> R { - UntaggedValue values[] = { args...}; + UntaggedValue values[] = {args...}; CALL_WITH_CONTEXT_RETURN(invokeFunctionUnchecked(wavm->context(), f, &values[0]), context, uint32_t, i32); }; @@ -461,7 +461,7 @@ void getFunctionWavmReturn(WasmVm* vm, absl::string_view functionName, throw WasmVmException(fmt::format("Bad function signature for: {}", functionName)); } *function = [wavm, f](Context* context, Args... args) -> R { - UntaggedValue values[] = { args...}; + UntaggedValue values[] = {args...}; CALL_WITH_CONTEXT(invokeFunctionUnchecked(wavm->context(), f, &values[0]), context); }; } diff --git a/source/extensions/wasm/config.cc b/source/extensions/wasm/config.cc index 601c4208acba..4ad78eda3482 100644 --- a/source/extensions/wasm/config.cc +++ b/source/extensions/wasm/config.cc @@ -25,6 +25,7 @@ Server::WasmSharedPtr WasmFactory::createWasm(const envoy::config::wasm::v2::Was context.dispatcher(), context.api()); if (config.singleton()) { // Return the WASM VM which will be stored as a singleton by the Server. + base_wasm->start(); return base_wasm; } auto configuration = std::make_shared(config.configuration()); diff --git a/test/extensions/filters/http/wasm/wasm_filter_test.cc b/test/extensions/filters/http/wasm/wasm_filter_test.cc index e54b0462209a..5f88754cf1cf 100644 --- a/test/extensions/filters/http/wasm/wasm_filter_test.cc +++ b/test/extensions/filters/http/wasm/wasm_filter_test.cc @@ -58,15 +58,16 @@ class WasmHttpFilterTest : public testing::Test { } void setupFilter() { - wasm_->setGeneralContext(std::make_unique(wasm_.get())); - filter_ = std::make_unique(wasm_.get()); + filter_ = std::make_shared(wasm_.get()); + wasm_->setGeneralContext( + std::static_pointer_cast(filter_)); } NiceMock tls_; NiceMock dispatcher_; Upstream::MockClusterManager cluster_manager_; std::shared_ptr wasm_; - std::unique_ptr filter_; + std::shared_ptr filter_; Http::MockStreamDecoderFilterCallbacks decoder_callbacks_; Http::MockStreamEncoderFilterCallbacks encoder_callbacks_; envoy::api::v2::core::Metadata metadata_; diff --git a/test/extensions/wasm/wasm_test.cc b/test/extensions/wasm/wasm_test.cc index c484463e841b..d9ab163599f1 100644 --- a/test/extensions/wasm/wasm_test.cc +++ b/test/extensions/wasm/wasm_test.cc @@ -111,7 +111,7 @@ TEST(WasmTest, DivByZero) { wasm->setGeneralContext(std::move(context)); wasm->wasmVm()->start(wasm->generalContext()); EXPECT_THROW_WITH_REGEX(wasm->generalContext()->onLog(), Extensions::Common::Wasm::WasmException, - "wavm.integerDivideByZeroOrOverflow.*"); + "wavm.integerDivideByZeroOrOverflow.*"); } } // namespace Wasm