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:
authorAnna Henningsen <anna@addaleax.net>2018-07-27 15:36:40 +0300
committerAnna Henningsen <anna@addaleax.net>2018-08-05 14:46:14 +0300
commit5be9b1d7f37ca41b0bb27d532881cb6b0dc54f6e (patch)
treeddbf2862b3fb52cf4ee5b503dc7da4934102f68b /src/async_wrap.cc
parentaf7164ebccd21d9fc5b0782e0427257f7637a4db (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.cc21
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)