Skip to content

Commit

Permalink
async-wrap: set flags using functions
Browse files Browse the repository at this point in the history
Setting flags using cryptic numeric object fields is confusing. Instead
use much simpler .enable()/.disable() calls on the async_wrap object.

PR-URL: #1614
Reviewed-By: Ben Noordhuis <info@bnoordhuis.nl>
  • Loading branch information
trevnorris committed May 5, 2015
1 parent 4b2c786 commit bd42ba0
Showing 1 changed file with 21 additions and 23 deletions.
44 changes: 21 additions & 23 deletions src/async-wrap.cc
Original file line number Diff line number Diff line change
Expand Up @@ -23,32 +23,28 @@ using v8::kExternalUint32Array;

namespace node {

static void EnableHooksJS(const FunctionCallbackInfo<Value>& args) {
Environment* env = Environment::GetCurrent(args);
env->async_hooks()->set_enable_callbacks(1);
}


static void DisableHooksJS(const FunctionCallbackInfo<Value>& args) {
Environment* env = Environment::GetCurrent(args);
env->async_hooks()->set_enable_callbacks(0);
}


static void SetupHooks(const FunctionCallbackInfo<Value>& 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<Object> async_hooks_obj = args[0].As<Object>();
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<Function>());
env->set_async_hooks_pre_function(args[2].As<Function>());
env->set_async_hooks_post_function(args[3].As<Function>());

env->set_async_hooks_init_function(args[0].As<Function>());
env->set_async_hooks_pre_function(args[1].As<Function>());
env->set_async_hooks_post_function(args[2].As<Function>());

env->set_using_asyncwrap(true);
}
Expand All @@ -61,7 +57,9 @@ static void Initialize(Handle<Object> 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<Object> async_providers = Object::New(isolate);
#define V(PROVIDER) \
Expand Down

0 comments on commit bd42ba0

Please sign in to comment.