Skip to content

Commit 9125e2b

Browse files
addaleaxrvagg
authored andcommitted
src: add convenience ctor for async trigger id scope
This backport differs from the original only in the omission of a change to `stream_base-inl.h` which would have generated conflicts. Backport-PR-URL: #21600 PR-URL: #19204 Reviewed-By: Joyee Cheung <[email protected]> Reviewed-By: James M Snell <[email protected]> Reviewed-By: Daniel Bevenius <[email protected]>
1 parent 2ee4bb7 commit 9125e2b

File tree

7 files changed

+18
-14
lines changed

7 files changed

+18
-14
lines changed

src/async_wrap-inl.h

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,13 @@ inline v8::MaybeLocal<v8::Value> AsyncWrap::MakeCallback(
6464
return MakeCallback(cb_v.As<v8::Function>(), argc, argv);
6565
}
6666

67+
68+
// Defined here to avoid a circular dependency with env-inl.h.
69+
inline Environment::AsyncHooks::DefaultTriggerAsyncIdScope
70+
::DefaultTriggerAsyncIdScope(AsyncWrap* async_wrap)
71+
: DefaultTriggerAsyncIdScope(async_wrap->env(),
72+
async_wrap->get_async_id()) {}
73+
6774
} // namespace node
6875

6976
#endif // defined(NODE_WANT_INTERNALS) && NODE_WANT_INTERNALS

src/async_wrap.cc

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -331,8 +331,7 @@ static void PromiseHook(PromiseHookType type, Local<Promise> promise,
331331
parent_wrap = PromiseWrap::New(env, parent_promise, nullptr, true);
332332
}
333333

334-
AsyncHooks::DefaultTriggerAsyncIdScope trigger_scope(
335-
env, parent_wrap->get_async_id());
334+
AsyncHooks::DefaultTriggerAsyncIdScope trigger_scope(parent_wrap);
336335
wrap = PromiseWrap::New(env, promise, parent_wrap, silent);
337336
} else {
338337
wrap = PromiseWrap::New(env, promise, nullptr, silent);

src/env-inl.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -167,6 +167,9 @@ inline void Environment::AsyncHooks::clear_async_id_stack() {
167167
fields_[kStackLength] = 0;
168168
}
169169

170+
// The DefaultTriggerAsyncIdScope(AsyncWrap*) constructor is defined in
171+
// async_wrap-inl.h to avoid a circular dependency.
172+
170173
inline Environment::AsyncHooks::DefaultTriggerAsyncIdScope
171174
::DefaultTriggerAsyncIdScope(Environment* env,
172175
double default_trigger_async_id)

src/env.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -432,6 +432,7 @@ class Environment {
432432
DefaultTriggerAsyncIdScope() = delete;
433433
explicit DefaultTriggerAsyncIdScope(Environment* env,
434434
double init_trigger_async_id);
435+
explicit DefaultTriggerAsyncIdScope(AsyncWrap* async_wrap);
435436
~DefaultTriggerAsyncIdScope();
436437

437438
private:

src/pipe_wrap.cc

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -52,8 +52,7 @@ Local<Object> PipeWrap::Instantiate(Environment* env,
5252
AsyncWrap* parent,
5353
PipeWrap::SocketType type) {
5454
EscapableHandleScope handle_scope(env->isolate());
55-
AsyncHooks::DefaultTriggerAsyncIdScope trigger_scope(env,
56-
parent->get_async_id());
55+
AsyncHooks::DefaultTriggerAsyncIdScope trigger_scope(parent);
5756
CHECK_EQ(false, env->pipe_constructor_template().IsEmpty());
5857
Local<Function> constructor = env->pipe_constructor_template()->GetFunction();
5958
CHECK_EQ(false, constructor.IsEmpty());

src/tcp_wrap.cc

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -56,8 +56,7 @@ Local<Object> TCPWrap::Instantiate(Environment* env,
5656
AsyncWrap* parent,
5757
TCPWrap::SocketType type) {
5858
EscapableHandleScope handle_scope(env->isolate());
59-
AsyncHooks::DefaultTriggerAsyncIdScope trigger_scope(
60-
env, parent->get_async_id());
59+
AsyncHooks::DefaultTriggerAsyncIdScope trigger_scope(parent);
6160
CHECK_EQ(env->tcp_constructor_template().IsEmpty(), false);
6261
Local<Function> constructor = env->tcp_constructor_template()->GetFunction();
6362
CHECK_EQ(constructor.IsEmpty(), false);
@@ -294,8 +293,7 @@ void TCPWrap::Connect(const FunctionCallbackInfo<Value>& args) {
294293
int err = uv_ip4_addr(*ip_address, port, &addr);
295294

296295
if (err == 0) {
297-
AsyncHooks::DefaultTriggerAsyncIdScope trigger_scope(
298-
env, wrap->get_async_id());
296+
AsyncHooks::DefaultTriggerAsyncIdScope trigger_scope(wrap);
299297
ConnectWrap* req_wrap =
300298
new ConnectWrap(env, req_wrap_obj, AsyncWrap::PROVIDER_TCPCONNECTWRAP);
301299
err = uv_tcp_connect(req_wrap->req(),
@@ -331,8 +329,7 @@ void TCPWrap::Connect6(const FunctionCallbackInfo<Value>& args) {
331329
int err = uv_ip6_addr(*ip_address, port, &addr);
332330

333331
if (err == 0) {
334-
AsyncHooks::DefaultTriggerAsyncIdScope trigger_scope(
335-
env, wrap->get_async_id());
332+
AsyncHooks::DefaultTriggerAsyncIdScope trigger_scope(wrap);
336333
ConnectWrap* req_wrap =
337334
new ConnectWrap(env, req_wrap_obj, AsyncWrap::PROVIDER_TCPCONNECTWRAP);
338335
err = uv_tcp_connect(req_wrap->req(),

src/udp_wrap.cc

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -356,8 +356,7 @@ void UDPWrap::DoSend(const FunctionCallbackInfo<Value>& args, int family) {
356356

357357
SendWrap* req_wrap;
358358
{
359-
AsyncHooks::DefaultTriggerAsyncIdScope trigger_scope(
360-
env, wrap->get_async_id());
359+
AsyncHooks::DefaultTriggerAsyncIdScope trigger_scope(wrap);
361360
req_wrap = new SendWrap(env, req_wrap_obj, have_callback);
362361
}
363362
size_t msg_size = 0;
@@ -508,8 +507,7 @@ Local<Object> UDPWrap::Instantiate(Environment* env,
508507
AsyncWrap* parent,
509508
UDPWrap::SocketType type) {
510509
EscapableHandleScope scope(env->isolate());
511-
AsyncHooks::DefaultTriggerAsyncIdScope trigger_scope(
512-
env, parent->get_async_id());
510+
AsyncHooks::DefaultTriggerAsyncIdScope trigger_scope(parent);
513511

514512
// If this assert fires then Initialize hasn't been called yet.
515513
CHECK_EQ(env->udp_constructor_function().IsEmpty(), false);

0 commit comments

Comments
 (0)