Skip to content

Commit 1a0727d

Browse files
jasonginaddaleax
authored andcommitted
n-api: change async resource name to napi_value
PR-URL: #14697 Reviewed-By: Anna Henningsen <[email protected]>
1 parent 2509c34 commit 1a0727d

File tree

6 files changed

+49
-16
lines changed

6 files changed

+49
-16
lines changed

doc/api/n-api.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -3265,7 +3265,7 @@ changes:
32653265
NAPI_EXTERN
32663266
napi_status napi_create_async_work(napi_env env,
32673267
napi_value async_resource,
3268-
const char* async_resource_name,
3268+
napi_value async_resource_name,
32693269
napi_async_execute_callback execute,
32703270
napi_async_complete_callback complete,
32713271
void* data,

src/async-wrap.cc

+11-4
Original file line numberDiff line numberDiff line change
@@ -643,6 +643,16 @@ async_context EmitAsyncInit(Isolate* isolate,
643643
Local<Object> resource,
644644
const char* name,
645645
async_id trigger_async_id) {
646+
Local<String> type =
647+
String::NewFromUtf8(isolate, name, v8::NewStringType::kInternalized)
648+
.ToLocalChecked();
649+
return EmitAsyncInit(isolate, resource, type, trigger_async_id);
650+
}
651+
652+
async_context EmitAsyncInit(Isolate* isolate,
653+
Local<Object> resource,
654+
v8::Local<v8::String> name,
655+
async_id trigger_async_id) {
646656
Environment* env = Environment::GetCurrent(isolate);
647657

648658
// Initialize async context struct
@@ -655,10 +665,7 @@ async_context EmitAsyncInit(Isolate* isolate,
655665
};
656666

657667
// Run init hooks
658-
Local<String> type =
659-
String::NewFromUtf8(isolate, name, v8::NewStringType::kInternalized)
660-
.ToLocalChecked();
661-
AsyncWrap::EmitAsyncInit(env, resource, type, context.async_id,
668+
AsyncWrap::EmitAsyncInit(env, resource, name, context.async_id,
662669
context.trigger_async_id);
663670

664671
return context;

src/node.h

+15
Original file line numberDiff line numberDiff line change
@@ -566,6 +566,11 @@ NODE_EXTERN async_context EmitAsyncInit(v8::Isolate* isolate,
566566
const char* name,
567567
async_id trigger_async_id = -1);
568568

569+
NODE_EXTERN async_context EmitAsyncInit(v8::Isolate* isolate,
570+
v8::Local<v8::Object> resource,
571+
v8::Local<v8::String> name,
572+
async_id trigger_async_id = -1);
573+
569574
/* Emit the destroy() callback. */
570575
NODE_EXTERN void EmitAsyncDestroy(v8::Isolate* isolate,
571576
async_context asyncContext);
@@ -647,6 +652,16 @@ class AsyncResource {
647652
trigger_async_id);
648653
}
649654

655+
AsyncResource(v8::Isolate* isolate,
656+
v8::Local<v8::Object> resource,
657+
v8::Local<v8::String> name,
658+
async_id trigger_async_id = -1)
659+
: isolate_(isolate),
660+
resource_(isolate, resource) {
661+
async_context_ = EmitAsyncInit(isolate, resource, name,
662+
trigger_async_id);
663+
}
664+
650665
~AsyncResource() {
651666
EmitAsyncDestroy(isolate_, async_context_);
652667
}

src/node_api.cc

+10-7
Original file line numberDiff line numberDiff line change
@@ -3250,7 +3250,7 @@ class Work : public node::AsyncResource {
32503250
private:
32513251
explicit Work(napi_env env,
32523252
v8::Local<v8::Object> async_resource,
3253-
const char* async_resource_name,
3253+
v8::Local<v8::String> async_resource_name,
32543254
napi_async_execute_callback execute,
32553255
napi_async_complete_callback complete = nullptr,
32563256
void* data = nullptr)
@@ -3270,7 +3270,7 @@ class Work : public node::AsyncResource {
32703270
public:
32713271
static Work* New(napi_env env,
32723272
v8::Local<v8::Object> async_resource,
3273-
const char* async_resource_name,
3273+
v8::Local<v8::String> async_resource_name,
32743274
napi_async_execute_callback execute,
32753275
napi_async_complete_callback complete,
32763276
void* data) {
@@ -3340,7 +3340,7 @@ class Work : public node::AsyncResource {
33403340

33413341
napi_status napi_create_async_work(napi_env env,
33423342
napi_value async_resource,
3343-
const char* async_resource_name,
3343+
napi_value async_resource_name,
33443344
napi_async_execute_callback execute,
33453345
napi_async_complete_callback complete,
33463346
void* data,
@@ -3349,17 +3349,20 @@ napi_status napi_create_async_work(napi_env env,
33493349
CHECK_ARG(env, execute);
33503350
CHECK_ARG(env, result);
33513351

3352+
v8::Local<v8::Context> context = env->isolate->GetCurrentContext();
3353+
33523354
v8::Local<v8::Object> resource;
33533355
if (async_resource != nullptr) {
3354-
auto value = v8impl::V8LocalValueFromJsValue(async_resource);
3355-
RETURN_STATUS_IF_FALSE(env, value->IsObject(), napi_invalid_arg);
3356-
resource = value.As<v8::Object>();
3356+
CHECK_TO_OBJECT(env, context, resource, async_resource);
33573357
} else {
33583358
resource = v8::Object::New(env->isolate);
33593359
}
33603360

3361+
v8::Local<v8::String> resource_name;
3362+
CHECK_TO_STRING(env, context, resource_name, async_resource_name);
3363+
33613364
uvimpl::Work* work =
3362-
uvimpl::Work::New(env, resource, async_resource_name,
3365+
uvimpl::Work::New(env, resource, resource_name,
33633366
execute, complete, data);
33643367

33653368
*result = reinterpret_cast<napi_async_work>(work);

src/node_api.h

+1-1
Original file line numberDiff line numberDiff line change
@@ -525,7 +525,7 @@ NAPI_EXTERN napi_status napi_get_dataview_info(napi_env env,
525525
NAPI_EXTERN
526526
napi_status napi_create_async_work(napi_env env,
527527
napi_value async_resource,
528-
const char* async_resource_name,
528+
napi_value async_resource_name,
529529
napi_async_execute_callback execute,
530530
napi_async_complete_callback complete,
531531
void* data,

test/addons-napi/test_async/test_async.cc

+11-3
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,7 @@ napi_value Test(napi_env env, napi_callback_info info) {
7171
size_t argc = 3;
7272
napi_value argv[3];
7373
napi_value _this;
74+
napi_value resource_name;
7475
void* data;
7576
NAPI_CALL(env,
7677
napi_get_cb_info(env, info, &argc, argv, &_this, &data));
@@ -93,7 +94,10 @@ napi_value Test(napi_env env, napi_callback_info info) {
9394
napi_get_value_int32(env, argv[0], &the_carrier._input));
9495
NAPI_CALL(env,
9596
napi_create_reference(env, argv[2], 1, &the_carrier._callback));
96-
NAPI_CALL(env, napi_create_async_work(env, argv[1], "TestResource",
97+
98+
NAPI_CALL(env,
99+
napi_create_string_utf8(env, "TestResource", -1, &resource_name));
100+
NAPI_CALL(env, napi_create_async_work(env, argv[1], resource_name,
97101
Execute, Complete, &the_carrier, &the_carrier._request));
98102
NAPI_CALL(env,
99103
napi_queue_async_work(env, the_carrier._request));
@@ -138,12 +142,16 @@ napi_value TestCancel(napi_env env, napi_callback_info info) {
138142
size_t argc = 1;
139143
napi_value argv[1];
140144
napi_value _this;
145+
napi_value resource_name;
141146
void* data;
142147

148+
NAPI_CALL(env,
149+
napi_create_string_utf8(env, "TestResource", -1, &resource_name));
150+
143151
// make sure the work we are going to cancel will not be
144152
// able to start by using all the threads in the pool
145153
for (int i = 1; i < MAX_CANCEL_THREADS; i++) {
146-
NAPI_CALL(env, napi_create_async_work(env, nullptr, "TestCancelBusy",
154+
NAPI_CALL(env, napi_create_async_work(env, nullptr, resource_name,
147155
CancelExecute, BusyCancelComplete,
148156
&async_carrier[i], &async_carrier[i]._request));
149157
NAPI_CALL(env, napi_queue_async_work(env, async_carrier[i]._request));
@@ -155,7 +163,7 @@ napi_value TestCancel(napi_env env, napi_callback_info info) {
155163
// workers above.
156164
NAPI_CALL(env,
157165
napi_get_cb_info(env, info, &argc, argv, &_this, &data));
158-
NAPI_CALL(env, napi_create_async_work(env, nullptr, "TestCancelled",
166+
NAPI_CALL(env, napi_create_async_work(env, nullptr, resource_name,
159167
CancelExecute, CancelComplete,
160168
&async_carrier[0], &async_carrier[0]._request));
161169
NAPI_CALL(env,

0 commit comments

Comments
 (0)