From bd42ba056afe1efe9a4f58f1274d9305c4998a1f Mon Sep 17 00:00:00 2001 From: Trevor Norris Date: Mon, 4 May 2015 16:00:37 -0600 Subject: [PATCH] async-wrap: set flags using functions Setting flags using cryptic numeric object fields is confusing. Instead use much simpler .enable()/.disable() calls on the async_wrap object. PR-URL: https://github.com/iojs/io.js/pull/1614 Reviewed-By: Ben Noordhuis --- src/async-wrap.cc | 44 +++++++++++++++++++++----------------------- 1 file changed, 21 insertions(+), 23 deletions(-) diff --git a/src/async-wrap.cc b/src/async-wrap.cc index 5710c43146060b..2da6b102934fa7 100644 --- a/src/async-wrap.cc +++ b/src/async-wrap.cc @@ -23,32 +23,28 @@ using v8::kExternalUint32Array; namespace node { +static void EnableHooksJS(const FunctionCallbackInfo& args) { + Environment* env = Environment::GetCurrent(args); + env->async_hooks()->set_enable_callbacks(1); +} + + +static void DisableHooksJS(const FunctionCallbackInfo& args) { + Environment* env = Environment::GetCurrent(args); + env->async_hooks()->set_enable_callbacks(0); +} + + static void SetupHooks(const FunctionCallbackInfo& args) { - Environment* env = Environment::GetCurrent(args.GetIsolate()); + Environment* env = Environment::GetCurrent(args); - CHECK(args[0]->IsObject()); + CHECK(args[0]->IsFunction()); CHECK(args[1]->IsFunction()); CHECK(args[2]->IsFunction()); - CHECK(args[3]->IsFunction()); - - // Attach Fields enum from Environment::AsyncHooks. - // Flags attached to this object are: - // - kCallInitHook (0): Tells the AsyncWrap constructor whether it should - // make a call to the init JS callback. This is disabled by default, so - // even after setting the callbacks the flag will have to be set to - // non-zero to have those callbacks called. This only affects the init - // callback. If the init callback was called, then the pre/post callbacks - // will automatically be called. - Local async_hooks_obj = args[0].As(); - Environment::AsyncHooks* async_hooks = env->async_hooks(); - async_hooks_obj->SetIndexedPropertiesToExternalArrayData( - async_hooks->fields(), - kExternalUint32Array, - async_hooks->fields_count()); - - env->set_async_hooks_init_function(args[1].As()); - env->set_async_hooks_pre_function(args[2].As()); - env->set_async_hooks_post_function(args[3].As()); + + env->set_async_hooks_init_function(args[0].As()); + env->set_async_hooks_pre_function(args[1].As()); + env->set_async_hooks_post_function(args[2].As()); env->set_using_asyncwrap(true); } @@ -61,7 +57,9 @@ static void Initialize(Handle target, Isolate* isolate = env->isolate(); HandleScope scope(isolate); - NODE_SET_METHOD(target, "setupHooks", SetupHooks); + env->SetMethod(target, "setupHooks", SetupHooks); + env->SetMethod(target, "disable", DisableHooksJS); + env->SetMethod(target, "enable", EnableHooksJS); Local async_providers = Object::New(isolate); #define V(PROVIDER) \