diff options
author | Trevor Norris <trev.norris@gmail.com> | 2015-02-06 01:54:12 +0300 |
---|---|---|
committer | Trevor Norris <trev.norris@gmail.com> | 2015-02-06 02:10:13 +0300 |
commit | 05f4dff97519ada5d3149a16ca9e5a04df948a61 (patch) | |
tree | 363d26473eb18d943e77547e1ba806a704518139 /src | |
parent | 10277d2e57ee7fe9e0e3f63f10b9ea521e86e7f0 (diff) |
asyncwrap: fix constructor condition for early ret
AsyncWrap should always properly propagate asynchronous calls to any
child that is created. Regardless whether kCallInitHook is currently
active. The previous logic would always return early if kCallInitHook
wasn't set.
PR-URL: https://github.com/iojs/io.js/pull/732
Reviewed-by: Ben Noordhuis <info@bnoordhuis.nl>
Diffstat (limited to 'src')
-rw-r--r-- | src/async-wrap-inl.h | 4 | ||||
-rw-r--r-- | src/async-wrap.cc | 2 | ||||
-rw-r--r-- | src/env-inl.h | 9 | ||||
-rw-r--r-- | src/env.h | 4 |
4 files changed, 18 insertions, 1 deletions
diff --git a/src/async-wrap-inl.h b/src/async-wrap-inl.h index 647a381e88f..6b434c08c00 100644 --- a/src/async-wrap-inl.h +++ b/src/async-wrap-inl.h @@ -21,7 +21,9 @@ inline AsyncWrap::AsyncWrap(Environment* env, has_async_queue_(false), provider_type_(provider) { // Check user controlled flag to see if the init callback should run. - if (!env->call_async_init_hook()) + if (!env->using_asyncwrap()) + return; + if (!env->call_async_init_hook() && parent != nullptr) return; // TODO(trevnorris): Until it's verified all passed object's are not weak, diff --git a/src/async-wrap.cc b/src/async-wrap.cc index eee020b788a..3ee97f6a820 100644 --- a/src/async-wrap.cc +++ b/src/async-wrap.cc @@ -48,6 +48,8 @@ static void SetupHooks(const FunctionCallbackInfo<Value>& args) { 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_using_asyncwrap(true); } diff --git a/src/env-inl.h b/src/env-inl.h index 46267ebd57d..ac97f8ea172 100644 --- a/src/env-inl.h +++ b/src/env-inl.h @@ -165,6 +165,7 @@ inline Environment::Environment(v8::Local<v8::Context> context, isolate_data_(IsolateData::GetOrCreate(context->GetIsolate(), loop)), using_smalloc_alloc_cb_(false), using_domains_(false), + using_asyncwrap_(false), printed_error_(false), debugger_agent_(this), context_(context->GetIsolate(), context) { @@ -298,6 +299,14 @@ inline void Environment::set_using_domains(bool value) { using_domains_ = value; } +inline bool Environment::using_asyncwrap() const { + return using_asyncwrap_; +} + +inline void Environment::set_using_asyncwrap(bool value) { + using_asyncwrap_ = value; +} + inline bool Environment::printed_error() const { return printed_error_; } diff --git a/src/env.h b/src/env.h index 8dc9c968835..f28d5ffad2a 100644 --- a/src/env.h +++ b/src/env.h @@ -395,6 +395,9 @@ class Environment { inline bool using_domains() const; inline void set_using_domains(bool value); + inline bool using_asyncwrap() const; + inline void set_using_asyncwrap(bool value); + inline bool printed_error() const; inline void set_printed_error(bool value); @@ -479,6 +482,7 @@ class Environment { ares_task_list cares_task_list_; bool using_smalloc_alloc_cb_; bool using_domains_; + bool using_asyncwrap_; bool printed_error_; debugger::Agent debugger_agent_; |