File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change @@ -280,6 +280,7 @@ class NODE_EXTERN MultiIsolatePlatform : public v8::Platform {
280280
281281 // This function may only be called once per `Isolate`, and discard any
282282 // pending delayed tasks scheduled for that isolate.
283+ // This needs to be called right before calling `Isolate::Dispose()`.
283284 virtual void UnregisterIsolate (v8::Isolate* isolate) = 0;
284285
285286 // The platform should call the passed function once all state associated
Original file line number Diff line number Diff line change @@ -99,8 +99,8 @@ NodeMainInstance::~NodeMainInstance() {
9999 if (!owns_isolate_) {
100100 return ;
101101 }
102- isolate_->Dispose ();
103102 platform_->UnregisterIsolate (isolate_);
103+ isolate_->Dispose ();
104104}
105105
106106int NodeMainInstance::Run () {
Original file line number Diff line number Diff line change @@ -192,8 +192,13 @@ class WorkerThreadData {
192192 *static_cast <bool *>(data) = true ;
193193 }, &platform_finished);
194194
195- isolate->Dispose ();
195+ // The order of these calls is important; if the Isolate is first disposed
196+ // and then unregistered, there is a race condition window in which no
197+ // new Isolate at the same address can successfully be registered with
198+ // the platform.
199+ // (Refs: https://github.com/nodejs/node/issues/30846)
196200 w_->platform_ ->UnregisterIsolate (isolate);
201+ isolate->Dispose ();
197202
198203 // Wait until the platform has cleaned up all relevant resources.
199204 while (!platform_finished)
Original file line number Diff line number Diff line change @@ -106,9 +106,9 @@ class NodeTestFixture : public ::testing::Test {
106106
107107 void TearDown () override {
108108 isolate_->Exit ();
109- isolate_->Dispose ();
110109 platform->DrainTasks (isolate_);
111110 platform->UnregisterIsolate (isolate_);
111+ isolate_->Dispose ();
112112 isolate_ = nullptr ;
113113 }
114114};
You can’t perform that action at this time.
0 commit comments