From 93f60cdc54754dd65e23927f628f2d9625318968 Mon Sep 17 00:00:00 2001 From: Ali Ijaz Sheikh Date: Mon, 22 Feb 2016 20:02:00 -0800 Subject: [PATCH] contextify: cleanup weak ref for global proxy Cleanup how node_contextify keeps weak references in order to prepare for new style phantom weakness API. We didn't need to keep a weak reference to the context's global proxy, as the context holds it. PR-URL: https://github.com/nodejs/node/pull/5392 Reviewed-By: Reviewed-By: bnoordhuis - Ben Noordhuis --- src/node_contextify.cc | 32 +++++++++++--------------------- 1 file changed, 11 insertions(+), 21 deletions(-) diff --git a/src/node_contextify.cc b/src/node_contextify.cc index 1db064a7a7b770..7b695b873a6e9a 100644 --- a/src/node_contextify.cc +++ b/src/node_contextify.cc @@ -52,21 +52,19 @@ class ContextifyContext { protected: enum Kind { kSandbox, - kContext, - kProxyGlobal + kContext }; Environment* const env_; Persistent sandbox_; Persistent context_; - Persistent proxy_global_; int references_; public: explicit ContextifyContext(Environment* env, Local sandbox) : env_(env), sandbox_(env->isolate(), sandbox), - // Wait for sandbox_, proxy_global_, and context_ to die + // Wait for sandbox_ and context_ to die references_(0) { context_.Reset(env->isolate(), CreateV8Context(env)); @@ -80,17 +78,11 @@ class ContextifyContext { context_.SetWeak(this, WeakCallback); context_.MarkIndependent(); references_++; - - proxy_global_.Reset(env->isolate(), context()->Global()); - proxy_global_.SetWeak(this, WeakCallback); - proxy_global_.MarkIndependent(); - references_++; } ~ContextifyContext() { context_.Reset(); - proxy_global_.Reset(); sandbox_.Reset(); } @@ -105,6 +97,10 @@ class ContextifyContext { } + inline Local global_proxy() const { + return context()->Global(); + } + // XXX(isaacs): This function only exists because of a shortcoming of // the V8 SetNamedPropertyHandler function. // @@ -320,10 +316,8 @@ class ContextifyContext { ContextifyContext* context = data.GetParameter(); if (kind == kSandbox) context->sandbox_.ClearWeak(); - else if (kind == kContext) - context->context_.ClearWeak(); else - context->proxy_global_.ClearWeak(); + context->context_.ClearWeak(); if (--context->references_ == 0) delete context; @@ -361,15 +355,14 @@ class ContextifyContext { MaybeLocal maybe_rv = sandbox->GetRealNamedProperty(ctx->context(), property); if (maybe_rv.IsEmpty()) { - Local proxy_global = PersistentToLocal(isolate, - ctx->proxy_global_); - maybe_rv = proxy_global->GetRealNamedProperty(ctx->context(), property); + maybe_rv = + ctx->global_proxy()->GetRealNamedProperty(ctx->context(), property); } Local rv; if (maybe_rv.ToLocal(&rv)) { if (rv == ctx->sandbox_) - rv = PersistentToLocal(isolate, ctx->proxy_global_); + rv = ctx->global_proxy(); args.GetReturnValue().Set(rv); } @@ -410,11 +403,8 @@ class ContextifyContext { sandbox->GetRealNamedPropertyAttributes(ctx->context(), property); if (maybe_prop_attr.IsNothing()) { - Local proxy_global = PersistentToLocal(isolate, - ctx->proxy_global_); - maybe_prop_attr = - proxy_global->GetRealNamedPropertyAttributes(ctx->context(), + ctx->global_proxy()->GetRealNamedPropertyAttributes(ctx->context(), property); }