diff --git a/src/api/async_resource.cc b/src/api/async_resource.cc index 0a2437fe6eda5c..3c4fbdadbc462c 100644 --- a/src/api/async_resource.cc +++ b/src/api/async_resource.cc @@ -62,10 +62,8 @@ async_id AsyncResource::get_trigger_async_id() const { return async_context_.trigger_async_id; } -// TODO(addaleax): We shouldn’t need to use env_->isolate() if we’re just going -// to end up using the Isolate* to figure out the Environment* again. AsyncResource::CallbackScope::CallbackScope(AsyncResource* res) - : node::CallbackScope(res->env_->isolate(), + : node::CallbackScope(res->env_, res->resource_.Get(res->env_->isolate()), res->async_context_) {} diff --git a/src/api/callback.cc b/src/api/callback.cc index 2a1c6301414176..46f17ba74e9528 100644 --- a/src/api/callback.cc +++ b/src/api/callback.cc @@ -27,6 +27,16 @@ CallbackScope::CallbackScope(Isolate* isolate, try_catch_.SetVerbose(true); } +CallbackScope::CallbackScope(Environment* env, + Local object, + async_context asyncContext) + : private_(new InternalCallbackScope(env, + object, + asyncContext)), + try_catch_(env->isolate()) { + try_catch_.SetVerbose(true); +} + CallbackScope::~CallbackScope() { if (try_catch_.HasCaught()) private_->MarkAsFailed(); diff --git a/src/node.h b/src/node.h index d19deab7cc7f64..2824de3bf8401d 100644 --- a/src/node.h +++ b/src/node.h @@ -983,6 +983,9 @@ class NODE_EXTERN CallbackScope { CallbackScope(v8::Isolate* isolate, v8::Local resource, async_context asyncContext); + CallbackScope(Environment* env, + v8::Local resource, + async_context asyncContext); ~CallbackScope(); void operator=(const CallbackScope&) = delete; diff --git a/src/node_api.cc b/src/node_api.cc index 3fcc9ecbf4a63f..e73e9a05713699 100644 --- a/src/node_api.cc +++ b/src/node_api.cc @@ -553,7 +553,7 @@ class AsyncContext { class CallbackScope : public node::CallbackScope { public: explicit CallbackScope(AsyncContext* async_context) - : node::CallbackScope(async_context->node_env()->isolate(), + : node::CallbackScope(async_context->node_env(), async_context->resource_.Get( async_context->node_env()->isolate()), async_context->async_context()) {}