summaryrefslogtreecommitdiff
path: root/src/stream_base.cc
diff options
context:
space:
mode:
authorAndreas Madsen <amwebdk@gmail.com>2017-11-22 18:41:00 +0100
committerAndreas Madsen <amwebdk@gmail.com>2017-12-19 18:04:52 +0100
commit3b8da4cbe8a7f36fcd8892c6676a55246ba8c3be (patch)
tree1afc84002d1716f4acd28126df214127e0262c3c /src/stream_base.cc
parent0784b0440c05464f79b857f7d8698fcc953d3fb3 (diff)
downloadandroid-node-v8-3b8da4cbe8a7f36fcd8892c6676a55246ba8c3be.tar.gz
android-node-v8-3b8da4cbe8a7f36fcd8892c6676a55246ba8c3be.tar.bz2
android-node-v8-3b8da4cbe8a7f36fcd8892c6676a55246ba8c3be.zip
async_hooks: use scope for defaultTriggerAsyncId
Previously the getter would mutate the kDefaultTriggerAsncId value. This refactor changes the setter to bind the current kDefaultTriggerAsncId to a scope, such that the getter doesn't have to mutate its own value. PR-URL: https://github.com/nodejs/node/pull/17273 Reviewed-By: Matteo Collina <matteo.collina@gmail.com> Reviewed-By: James M Snell <jasnell@gmail.com>
Diffstat (limited to 'src/stream_base.cc')
-rw-r--r--src/stream_base.cc38
1 files changed, 22 insertions, 16 deletions
diff --git a/src/stream_base.cc b/src/stream_base.cc
index f4bfb72f3f..b1aea79d52 100644
--- a/src/stream_base.cc
+++ b/src/stream_base.cc
@@ -52,7 +52,7 @@ int StreamBase::Shutdown(const FunctionCallbackInfo<Value>& args) {
AsyncWrap* wrap = GetAsyncWrap();
CHECK_NE(wrap, nullptr);
- env->set_default_trigger_async_id(wrap->get_async_id());
+ AsyncHooks::DefaultTriggerAsyncIdScope(env, wrap->get_async_id());
ShutdownWrap* req_wrap = new ShutdownWrap(env,
req_wrap_obj,
this);
@@ -109,7 +109,6 @@ int StreamBase::Writev(const FunctionCallbackInfo<Value>& args) {
size_t storage_size = 0;
uint32_t bytes = 0;
size_t offset;
- AsyncWrap* wrap;
WriteWrap* req_wrap;
int err;
@@ -153,10 +152,13 @@ int StreamBase::Writev(const FunctionCallbackInfo<Value>& args) {
goto done;
}
- wrap = GetAsyncWrap();
- CHECK_NE(wrap, nullptr);
- env->set_default_trigger_async_id(wrap->get_async_id());
- req_wrap = WriteWrap::New(env, req_wrap_obj, this, storage_size);
+ {
+ AsyncWrap* wrap = GetAsyncWrap();
+ CHECK_NE(wrap, nullptr);
+ AsyncHooks::DefaultTriggerAsyncIdScope trigger_scope(env,
+ wrap->get_async_id());
+ req_wrap = WriteWrap::New(env, req_wrap_obj, this, storage_size);
+ }
offset = 0;
if (!all_buffers) {
@@ -227,7 +229,6 @@ int StreamBase::WriteBuffer(const FunctionCallbackInfo<Value>& args) {
const char* data = Buffer::Data(args[1]);
size_t length = Buffer::Length(args[1]);
- AsyncWrap* wrap;
WriteWrap* req_wrap;
uv_buf_t buf;
buf.base = const_cast<char*>(data);
@@ -243,11 +244,14 @@ int StreamBase::WriteBuffer(const FunctionCallbackInfo<Value>& args) {
goto done;
CHECK_EQ(count, 1);
- wrap = GetAsyncWrap();
- if (wrap != nullptr)
- env->set_default_trigger_async_id(wrap->get_async_id());
// Allocate, or write rest
- req_wrap = WriteWrap::New(env, req_wrap_obj, this);
+ {
+ AsyncWrap* wrap = GetAsyncWrap();
+ CHECK_NE(wrap, nullptr);
+ AsyncHooks::DefaultTriggerAsyncIdScope trigger_scope(env,
+ wrap->get_async_id());
+ req_wrap = WriteWrap::New(env, req_wrap_obj, this);
+ }
err = DoWrite(req_wrap, bufs, count, nullptr);
if (HasWriteQueue())
@@ -278,7 +282,6 @@ int StreamBase::WriteString(const FunctionCallbackInfo<Value>& args) {
Local<Object> req_wrap_obj = args[0].As<Object>();
Local<String> string = args[1].As<String>();
Local<Object> send_handle_obj;
- AsyncWrap* wrap;
if (args[2]->IsObject())
send_handle_obj = args[2].As<Object>();
@@ -329,10 +332,13 @@ int StreamBase::WriteString(const FunctionCallbackInfo<Value>& args) {
CHECK_EQ(count, 1);
}
- wrap = GetAsyncWrap();
- if (wrap != nullptr)
- env->set_default_trigger_async_id(wrap->get_async_id());
- req_wrap = WriteWrap::New(env, req_wrap_obj, this, storage_size);
+ {
+ AsyncWrap* wrap = GetAsyncWrap();
+ CHECK_NE(wrap, nullptr);
+ AsyncHooks::DefaultTriggerAsyncIdScope trigger_scope(env,
+ wrap->get_async_id());
+ req_wrap = WriteWrap::New(env, req_wrap_obj, this, storage_size);
+ }
data = req_wrap->Extra();