diff options
author | Anna Henningsen <anna@addaleax.net> | 2018-07-27 15:36:40 +0300 |
---|---|---|
committer | Anna Henningsen <anna@addaleax.net> | 2018-08-05 14:46:14 +0300 |
commit | 5be9b1d7f37ca41b0bb27d532881cb6b0dc54f6e (patch) | |
tree | ddbf2862b3fb52cf4ee5b503dc7da4934102f68b /src/async_wrap.cc | |
parent | af7164ebccd21d9fc5b0782e0427257f7637a4db (diff) |
process: use owner_symbol for `_getActive*`
This makes it easier to provide public APIs in the return types
of `process._getActiveHandles()` and `process._getActiveRequests()`.
PR-URL: https://github.com/nodejs/node/pull/22002
Reviewed-By: James M Snell <jasnell@gmail.com>
Reviewed-By: Colin Ihrig <cjihrig@gmail.com>
Reviewed-By: Jon Moss <me@jonathanmoss.me>
Reviewed-By: Matteo Collina <matteo.collina@gmail.com>
Reviewed-By: Joyee Cheung <joyeec9h3@gmail.com>
Reviewed-By: Gus Caplan <me@gus.host>
Reviewed-By: Minwoo Jung <minwoo@nodesource.com>
Reviewed-By: Tiancheng "Timothy" Gu <timothygu99@gmail.com>
Reviewed-By: Ali Ijaz Sheikh <ofrobots@google.com>
Diffstat (limited to 'src/async_wrap.cc')
-rw-r--r-- | src/async_wrap.cc | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/src/async_wrap.cc b/src/async_wrap.cc index 9d9d03b0fa9..d47c0d6cfb6 100644 --- a/src/async_wrap.cc +++ b/src/async_wrap.cc @@ -734,6 +734,27 @@ std::string AsyncWrap::diagnostic_name() const { std::to_string(static_cast<int64_t>(async_id_)) + ")"; } +Local<Object> AsyncWrap::GetOwner() { + return GetOwner(env(), object()); +} + +Local<Object> AsyncWrap::GetOwner(Environment* env, Local<Object> obj) { + v8::EscapableHandleScope handle_scope(env->isolate()); + CHECK(!obj.IsEmpty()); + + v8::TryCatch ignore_exceptions(env->isolate()); + while (true) { + Local<Value> owner; + if (!obj->Get(env->context(), + env->owner_symbol()).ToLocal(&owner) || + !owner->IsObject()) { + return handle_scope.Escape(obj); + } + + obj = owner.As<Object>(); + } +} + } // namespace node NODE_BUILTIN_MODULE_CONTEXT_AWARE(async_wrap, node::AsyncWrap::Initialize) |