Skip to content

Commit 2b55995

Browse files
authored
v8: use signal handlers to catch out of bounds memory access. (#144)
This change improves performance by up to 36% in microbenchmarks. Benchmark Diff -------------------------------------------------------------------- WasmSpeedTest_empty -0.0185 WasmSpeedTest_get_current_time -0.1184 WasmSpeedTest_small_string -0.0081 WasmSpeedTest_small_string1000 -0.1324 WasmSpeedTest_small_string_check_compiler -0.0654 WasmSpeedTest_small_string_check_compiler1000 -0.1338 WasmSpeedTest_large_string -0.3187 WasmSpeedTest_large_string1000 -0.3624 WasmSpeedTest_get_property -0.0213 WasmSpeedTest_grpc_service -0.1426 WasmSpeedTest_grpc_service1000 -0.2431 WasmSpeedTest_modify_metadata -0.0287 WasmSpeedTest_modify_metadata1000 -0.0431 WasmSpeedTest_json_serialize -0.2729 WasmSpeedTest_json_deserialize -0.2594 WasmSpeedTest_json_deserialize_empty -0.2609 WasmSpeedTest_convert_to_filter_state -0.2889 Signed-off-by: Piotr Sikora <[email protected]>
1 parent 217320a commit 2b55995

File tree

1 file changed

+10
-1
lines changed

1 file changed

+10
-1
lines changed

src/v8/v8.cc

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,20 +18,29 @@
1818
#include <cassert>
1919
#include <iomanip>
2020
#include <memory>
21+
#include <mutex>
2122
#include <optional>
2223
#include <sstream>
2324
#include <unordered_map>
2425
#include <utility>
2526
#include <vector>
2627

28+
#include "v8.h"
2729
#include "v8-version.h"
2830
#include "wasm-api/wasm.hh"
2931

3032
namespace proxy_wasm {
3133
namespace {
3234

3335
wasm::Engine *engine() {
34-
static const auto engine = wasm::Engine::make();
36+
static std::once_flag init;
37+
static wasm::own<wasm::Engine> engine;
38+
39+
std::call_once(init, []() {
40+
v8::V8::EnableWebAssemblyTrapHandler(true);
41+
engine = wasm::Engine::make();
42+
});
43+
3544
return engine.get();
3645
}
3746

0 commit comments

Comments
 (0)