From 4a2b032fef37e3853e45d09255283d3e6fa08e56 Mon Sep 17 00:00:00 2001 From: Demi Obenour Date: Tue, 23 May 2017 16:27:23 -0400 Subject: [PATCH] Add a CallbackScope class All credit to Vladimir Kurchatkin, who created the original patch in https://github.com/nodejs/node/issues/5691#issuecomment-196325462. --- src/node.cc | 8 ++++++++ src/node.h | 12 ++++++++++++ 2 files changed, 20 insertions(+) diff --git a/src/node.cc b/src/node.cc index 5eefed5bd4f780..6a9fa7fb5a9d84 100644 --- a/src/node.cc +++ b/src/node.cc @@ -1463,6 +1463,14 @@ Local MakeCallback(Isolate* isolate, MakeCallback(env, recv.As(), callback, argc, argv)); } +CallbackScope::CallbackScope(Isolate* isolate): isolate_(isolate) { +} + +CallbackScope::~CallbackScope() { + Environment* env = Environment::GetCurrent(isolate_); + Environment::AsyncCallbackScope callback_scope(env); + env->KickNextTick(&callback_scope); +} enum encoding ParseEncoding(const char* encoding, enum encoding default_encoding) { diff --git a/src/node.h b/src/node.h index 7ed4521e87dbb2..4cf6fdd648f6b8 100644 --- a/src/node.h +++ b/src/node.h @@ -62,6 +62,7 @@ #include "v8.h" // NOLINT(build/include_order) #include "node_version.h" // NODE_MODULE_VERSION +#include "util.h" #define NODE_MAKE_VERSION(major, minor, patch) \ ((major) * 0x1000 + (minor) * 0x100 + (patch)) @@ -171,6 +172,17 @@ NODE_EXTERN v8::Local MakeCallback( int argc, v8::Local* argv); +class NODE_EXTERN CallbackScope { + public: + explicit CallbackScope(v8::Isolate* isolate); + ~CallbackScope(); + + private: + v8::Isolate* isolate_; + + DISALLOW_COPY_AND_ASSIGN(CallbackScope); +}; + } // namespace node #if defined(NODE_WANT_INTERNALS) && NODE_WANT_INTERNALS