diff options
author | Anna Henningsen <anna@addaleax.net> | 2017-06-06 13:22:48 -0600 |
---|---|---|
committer | Anna Henningsen <anna@addaleax.net> | 2017-06-10 11:38:02 +0200 |
commit | cc2dd93ea5ca097c105b10039b110409dcf9cecd (patch) | |
tree | 76352f5814f8e3c9aaeb80336642f6a868613046 /src/env.cc | |
parent | b9379095e165cd6c04c8e847654387a287eedc98 (diff) | |
download | android-node-v8-cc2dd93ea5ca097c105b10039b110409dcf9cecd.tar.gz android-node-v8-cc2dd93ea5ca097c105b10039b110409dcf9cecd.tar.bz2 android-node-v8-cc2dd93ea5ca097c105b10039b110409dcf9cecd.zip |
async_wrap: expose enable/disablePromiseHook API
Allow node::PromiseHook (src/async-wrap.cc) to be enabled/disabled from
the JavaScript API.
PR-URL: https://github.com/nodejs/node/pull/13509
Reviewed-By: Andreas Madsen <amwebdk@gmail.com>
Reviewed-By: Anna Henningsen <anna@addaleax.net>
Diffstat (limited to 'src/env.cc')
-rw-r--r-- | src/env.cc | 25 |
1 files changed, 25 insertions, 0 deletions
diff --git a/src/env.cc b/src/env.cc index 0bf4b573aa..c97868a588 100644 --- a/src/env.cc +++ b/src/env.cc @@ -11,6 +11,7 @@ #endif #include <stdio.h> +#include <algorithm> namespace node { @@ -178,12 +179,36 @@ void Environment::AtExit(void (*cb)(void* arg), void* arg) { } void Environment::AddPromiseHook(promise_hook_func fn, void* arg) { + auto it = std::find_if( + promise_hooks_.begin(), promise_hooks_.end(), + [&](const PromiseHookCallback& hook) { + return hook.cb_ == fn && hook.arg_ == arg; + }); + CHECK_EQ(it, promise_hooks_.end()); promise_hooks_.push_back(PromiseHookCallback{fn, arg}); + if (promise_hooks_.size() == 1) { isolate_->SetPromiseHook(EnvPromiseHook); } } +bool Environment::RemovePromiseHook(promise_hook_func fn, void* arg) { + auto it = std::find_if( + promise_hooks_.begin(), promise_hooks_.end(), + [&](const PromiseHookCallback& hook) { + return hook.cb_ == fn && hook.arg_ == arg; + }); + + if (it == promise_hooks_.end()) return false; + + promise_hooks_.erase(it); + if (promise_hooks_.empty()) { + isolate_->SetPromiseHook(nullptr); + } + + return true; +} + void Environment::EnvPromiseHook(v8::PromiseHookType type, v8::Local<v8::Promise> promise, v8::Local<v8::Value> parent) { |