diff --git a/src/node_realm.cc b/src/node_realm.cc index 14e93a8474c313..8f135c08cca328 100644 --- a/src/node_realm.cc +++ b/src/node_realm.cc @@ -21,6 +21,7 @@ using v8::Value; Realm::Realm(Environment* env, v8::Local context, Kind kind) : env_(env), isolate_(context->GetIsolate()), kind_(kind) { context_.Reset(isolate_, context); + binding_data_store_.fill(nullptr); } Realm::~Realm() { diff --git a/src/node_shadow_realm.cc b/src/node_shadow_realm.cc index 5716da838731e3..55553bbe3ff873 100644 --- a/src/node_shadow_realm.cc +++ b/src/node_shadow_realm.cc @@ -49,15 +49,7 @@ void ShadowRealm::WeakCallback(const v8::WeakCallbackInfo& data) { // This is necessary to avoid cleaning up base objects before their scheduled // weak callbacks are invoked, which can lead to accessing to v8 apis during // the first pass of the weak callback. - data.SetSecondPassCallback(SecondPassWeakCallback); -} - -// static -void ShadowRealm::SecondPassWeakCallback( - const v8::WeakCallbackInfo& data) { - ShadowRealm* realm = data.GetParameter(); - // Delete the realm and run cleanup hooks. - delete realm; + realm->env()->SetImmediate([realm](Environment* env) { delete realm; }); } ShadowRealm::ShadowRealm(Environment* env) diff --git a/src/node_shadow_realm.h b/src/node_shadow_realm.h index 742be2a8ec22b1..cc76cbacdc4842 100644 --- a/src/node_shadow_realm.h +++ b/src/node_shadow_realm.h @@ -30,8 +30,6 @@ class ShadowRealm : public Realm { private: static void WeakCallback(const v8::WeakCallbackInfo& data); - static void SecondPassWeakCallback( - const v8::WeakCallbackInfo& data); explicit ShadowRealm(Environment* env); ~ShadowRealm();