summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel Bevenius <daniel.bevenius@gmail.com>2018-03-12 10:45:48 +0100
committerDaniel Bevenius <daniel.bevenius@gmail.com>2018-03-14 10:40:38 +0100
commit861285abb5dbf23e5ce14d0695da468976cad478 (patch)
tree2c2e4a6139ace4c08321d1a5842adde81fc48671
parent90b05382734aca10b51b187eb955a964cbcaed74 (diff)
downloadnode-new-861285abb5dbf23e5ce14d0695da468976cad478.tar.gz
src: refactor emit before/after/promiseResolve
Currently EmitBefore, EmitAfter, EmitPromiseResolve are very similar. This commit suggests extracting the code they have in common to a new function to reduce code duplication. PR-URL: https://github.com/nodejs/node/pull/19295 Reviewed-By: Anna Henningsen <anna@addaleax.net>
-rw-r--r--src/async_wrap.cc34
1 files changed, 13 insertions, 21 deletions
diff --git a/src/async_wrap.cc b/src/async_wrap.cc
index b6776364a5..83882d9f80 100644
--- a/src/async_wrap.cc
+++ b/src/async_wrap.cc
@@ -162,19 +162,25 @@ static void DestroyAsyncIdsCallback(void* arg) {
}
-void AsyncWrap::EmitPromiseResolve(Environment* env, double async_id) {
+void Emit(Environment* env, double async_id, AsyncHooks::Fields type,
+ Local<Function> fn) {
AsyncHooks* async_hooks = env->async_hooks();
- if (async_hooks->fields()[AsyncHooks::kPromiseResolve] == 0)
+ if (async_hooks->fields()[type] == 0)
return;
Local<Value> async_id_value = Number::New(env->isolate(), async_id);
- Local<Function> fn = env->async_hooks_promise_resolve_function();
FatalTryCatch try_catch(env);
USE(fn->Call(env->context(), Undefined(env->isolate()), 1, &async_id_value));
}
+void AsyncWrap::EmitPromiseResolve(Environment* env, double async_id) {
+ Emit(env, async_id, AsyncHooks::kPromiseResolve,
+ env->async_hooks_promise_resolve_function());
+}
+
+
void AsyncWrap::EmitTraceEventBefore() {
switch (provider_type()) {
#define V(PROVIDER) \
@@ -192,15 +198,8 @@ void AsyncWrap::EmitTraceEventBefore() {
void AsyncWrap::EmitBefore(Environment* env, double async_id) {
- AsyncHooks* async_hooks = env->async_hooks();
-
- if (async_hooks->fields()[AsyncHooks::kBefore] == 0)
- return;
-
- Local<Value> async_id_value = Number::New(env->isolate(), async_id);
- Local<Function> fn = env->async_hooks_before_function();
- FatalTryCatch try_catch(env);
- USE(fn->Call(env->context(), Undefined(env->isolate()), 1, &async_id_value));
+ Emit(env, async_id, AsyncHooks::kBefore,
+ env->async_hooks_before_function());
}
@@ -221,17 +220,10 @@ void AsyncWrap::EmitTraceEventAfter() {
void AsyncWrap::EmitAfter(Environment* env, double async_id) {
- AsyncHooks* async_hooks = env->async_hooks();
-
- if (async_hooks->fields()[AsyncHooks::kAfter] == 0)
- return;
-
// If the user's callback failed then the after() hooks will be called at the
// end of _fatalException().
- Local<Value> async_id_value = Number::New(env->isolate(), async_id);
- Local<Function> fn = env->async_hooks_after_function();
- FatalTryCatch try_catch(env);
- USE(fn->Call(env->context(), Undefined(env->isolate()), 1, &async_id_value));
+ Emit(env, async_id, AsyncHooks::kAfter,
+ env->async_hooks_after_function());
}
class PromiseWrap : public AsyncWrap {