From ab03c29587496ad6d6fe03468ef4c9f29af7adda Mon Sep 17 00:00:00 2001 From: Shelley Vohr Date: Wed, 30 Oct 2019 10:52:45 -0700 Subject: [PATCH] src: isolate->Dispose() order consistency PR-URL: https://github.com/nodejs/node/pull/30181 Reviewed-By: Colin Ihrig Reviewed-By: Anna Henningsen Reviewed-By: Gus Caplan Reviewed-By: David Carlier --- src/node.h | 3 ++- src/node_worker.cc | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/src/node.h b/src/node.h index 4d29feb270ec98..d5691513992adb 100644 --- a/src/node.h +++ b/src/node.h @@ -267,10 +267,11 @@ class NODE_EXTERN MultiIsolatePlatform : public v8::Platform { // This function may only be called once per `Isolate`. virtual void RegisterIsolate(v8::Isolate* isolate, struct uv_loop_s* loop) = 0; - // This needs to be called right before calling `Isolate::Dispose()`. + // This function may only be called once per `Isolate`, and discard any // pending delayed tasks scheduled for that isolate. virtual void UnregisterIsolate(v8::Isolate* isolate) = 0; + // The platform should call the passed function once all state associated // with the given isolate has been cleaned up. This can, but does not have to, // happen asynchronously. diff --git a/src/node_worker.cc b/src/node_worker.cc index 025b5fed49cbb5..af79540631f153 100644 --- a/src/node_worker.cc +++ b/src/node_worker.cc @@ -155,9 +155,9 @@ class WorkerThreadData { w_->platform_->AddIsolateFinishedCallback(isolate, [](void* data) { *static_cast(data) = true; }, &platform_finished); - w_->platform_->UnregisterIsolate(isolate); isolate->Dispose(); + w_->platform_->UnregisterIsolate(isolate); // Wait until the platform has cleaned up all relevant resources. while (!platform_finished)