diff options
author | Anna Henningsen <anna@addaleax.net> | 2020-02-14 18:28:58 +0300 |
---|---|---|
committer | Anna Henningsen <anna@addaleax.net> | 2020-02-14 19:15:18 +0300 |
commit | e460f8cf43863a5a8d73273ce311135ad3245699 (patch) | |
tree | 52491841476289af24ab350bd1fafe0aa8f12fdb /src/node_main_instance.cc | |
parent | 75311dbc2f5fbd1c81dbab94e1372b55e0dbb1ac (diff) |
src: keep main-thread Isolate attached to platform during Dispose
This works around a situation in which the V8 WASM code calls
into the platform while the Isolate is being disposed.
This goes against the V8 API constract for `v8::Platform`.
In lieu of a proper fix, it should be okay to keep the Isolate
registered; the race condition fixed by 25447d82d cannot
occur for the `NodeMainInstance`’s Isolate, as it is the last
one to exit in any given Node.js process.
This partially reverts 25447d82d.
Refs: https://github.com/nodejs/node/pull/30909
Refs: https://github.com/nodejs/node/issues/31752
PR-URL: https://github.com/nodejs/node/pull/31795
Reviewed-By: Denys Otrishko <shishugi@gmail.com>
Reviewed-By: James M Snell <jasnell@gmail.com>
Diffstat (limited to 'src/node_main_instance.cc')
-rw-r--r-- | src/node_main_instance.cc | 6 |
1 files changed, 5 insertions, 1 deletions
diff --git a/src/node_main_instance.cc b/src/node_main_instance.cc index ad6966cf4fc..d53eaa7329b 100644 --- a/src/node_main_instance.cc +++ b/src/node_main_instance.cc @@ -102,8 +102,12 @@ NodeMainInstance::~NodeMainInstance() { if (!owns_isolate_) { return; } - platform_->UnregisterIsolate(isolate_); + // TODO(addaleax): Reverse the order of these calls. The fact that we first + // dispose the Isolate is a temporary workaround for + // https://github.com/nodejs/node/issues/31752 -- V8 should not be posting + // platform tasks during Dispose(), but it does in some WASM edge cases. isolate_->Dispose(); + platform_->UnregisterIsolate(isolate_); } int NodeMainInstance::Run() { |