Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/nodejs/node.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/async_wrap-inl.h16
-rw-r--r--src/async_wrap.h12
2 files changed, 28 insertions, 0 deletions
diff --git a/src/async_wrap-inl.h b/src/async_wrap-inl.h
index 21b1f9cee9f..c9f12333243 100644
--- a/src/async_wrap-inl.h
+++ b/src/async_wrap-inl.h
@@ -45,6 +45,22 @@ inline double AsyncWrap::get_trigger_async_id() const {
}
+inline AsyncWrap::AsyncScope::AsyncScope(AsyncWrap* wrap)
+ : wrap_(wrap) {
+ Environment* env = wrap->env();
+ if (env->async_hooks()->fields()[Environment::AsyncHooks::kBefore] == 0)
+ return;
+ EmitBefore(env, wrap->get_async_id());
+}
+
+inline AsyncWrap::AsyncScope::~AsyncScope() {
+ Environment* env = wrap_->env();
+ if (env->async_hooks()->fields()[Environment::AsyncHooks::kAfter] == 0)
+ return;
+ EmitAfter(env, wrap_->get_async_id());
+}
+
+
inline v8::MaybeLocal<v8::Value> AsyncWrap::MakeCallback(
const v8::Local<v8::String> symbol,
int argc,
diff --git a/src/async_wrap.h b/src/async_wrap.h
index b7aed5d7897..608764bab53 100644
--- a/src/async_wrap.h
+++ b/src/async_wrap.h
@@ -169,6 +169,18 @@ class AsyncWrap : public BaseObject {
static void WeakCallback(const v8::WeakCallbackInfo<DestroyParam> &info);
+ // This is a simplified version of InternalCallbackScope that only runs
+ // the `before` and `after` hooks. Only use it when not actually calling
+ // back into JS; otherwise, use InternalCallbackScope.
+ class AsyncScope {
+ public:
+ explicit inline AsyncScope(AsyncWrap* wrap);
+ ~AsyncScope();
+
+ private:
+ AsyncWrap* wrap_ = nullptr;
+ };
+
private:
friend class PromiseWrap;