diff --git a/src/node_contextify.cc b/src/node_contextify.cc index ae043eb376a115..2c52e7f0f8b4e2 100644 --- a/src/node_contextify.cc +++ b/src/node_contextify.cc @@ -65,9 +65,10 @@ class ContextifyContext { explicit ContextifyContext(Environment* env, Local sandbox) : env_(env), sandbox_(env->isolate(), sandbox), - context_(env->isolate(), CreateV8Context(env)), // Wait for sandbox_, proxy_global_, and context_ to die references_(0) { + context_.Reset(env->isolate(), CreateV8Context(env)); + sandbox_.SetWeak(this, WeakCallback); sandbox_.MarkIndependent(); references_++; @@ -355,6 +356,10 @@ class ContextifyContext { ContextifyContext* ctx = Unwrap(args.Data().As()); + // Stil initializing + if (ctx->context_.IsEmpty()) + return; + Local sandbox = PersistentToLocal(isolate, ctx->sandbox_); MaybeLocal maybe_rv = sandbox->GetRealNamedProperty(ctx->context(), property); @@ -383,6 +388,10 @@ class ContextifyContext { ContextifyContext* ctx = Unwrap(args.Data().As()); + // Stil initializing + if (ctx->context_.IsEmpty()) + return; + PersistentToLocal(isolate, ctx->sandbox_)->Set(property, value); } @@ -395,6 +404,10 @@ class ContextifyContext { ContextifyContext* ctx = Unwrap(args.Data().As()); + // Stil initializing + if (ctx->context_.IsEmpty()) + return; + Local sandbox = PersistentToLocal(isolate, ctx->sandbox_); Maybe maybe_prop_attr = sandbox->GetRealNamedPropertyAttributes(ctx->context(), property); @@ -422,6 +435,11 @@ class ContextifyContext { ContextifyContext* ctx = Unwrap(args.Data().As()); + + // Stil initializing + if (ctx->context_.IsEmpty()) + return; + Local sandbox = PersistentToLocal(isolate, ctx->sandbox_); Maybe success = sandbox->Delete(ctx->context(), property); @@ -436,6 +454,10 @@ class ContextifyContext { ContextifyContext* ctx = Unwrap(args.Data().As()); + // Stil initializing + if (ctx->context_.IsEmpty()) + return; + Local sandbox = PersistentToLocal(args.GetIsolate(), ctx->sandbox_); args.GetReturnValue().Set(sandbox->GetPropertyNames()); }