Skip to content

Commit 7b7c030

Browse files
jasonginjasnell
authored andcommitted
n-api: change async resource name to napi_value
PR-URL: #14697 Reviewed-By: Anna Henningsen <anna@addaleax.net>
1 parent 50b6203 commit 7b7c030

File tree

6 files changed

+49
-16
lines changed

6 files changed

+49
-16
lines changed

doc/api/n-api.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3273,7 +3273,7 @@ changes:
32733273
NAPI_EXTERN
32743274
napi_status napi_create_async_work(napi_env env,
32753275
napi_value async_resource,
3276-
const char* async_resource_name,
3276+
napi_value async_resource_name,
32773277
napi_async_execute_callback execute,
32783278
napi_async_complete_callback complete,
32793279
void* data,

src/async-wrap.cc

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -652,6 +652,16 @@ async_context EmitAsyncInit(Isolate* isolate,
652652
Local<Object> resource,
653653
const char* name,
654654
async_id trigger_async_id) {
655+
Local<String> type =
656+
String::NewFromUtf8(isolate, name, v8::NewStringType::kInternalized)
657+
.ToLocalChecked();
658+
return EmitAsyncInit(isolate, resource, type, trigger_async_id);
659+
}
660+
661+
async_context EmitAsyncInit(Isolate* isolate,
662+
Local<Object> resource,
663+
v8::Local<v8::String> name,
664+
async_id trigger_async_id) {
655665
Environment* env = Environment::GetCurrent(isolate);
656666

657667
// Initialize async context struct
@@ -664,10 +674,7 @@ async_context EmitAsyncInit(Isolate* isolate,
664674
};
665675

666676
// Run init hooks
667-
Local<String> type =
668-
String::NewFromUtf8(isolate, name, v8::NewStringType::kInternalized)
669-
.ToLocalChecked();
670-
AsyncWrap::EmitAsyncInit(env, resource, type, context.async_id,
677+
AsyncWrap::EmitAsyncInit(env, resource, name, context.async_id,
671678
context.trigger_async_id);
672679

673680
return context;

src/node.h

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -591,6 +591,11 @@ NODE_EXTERN async_context EmitAsyncInit(v8::Isolate* isolate,
591591
const char* name,
592592
async_id trigger_async_id = -1);
593593

594+
NODE_EXTERN async_context EmitAsyncInit(v8::Isolate* isolate,
595+
v8::Local<v8::Object> resource,
596+
v8::Local<v8::String> name,
597+
async_id trigger_async_id = -1);
598+
594599
/* Emit the destroy() callback. */
595600
NODE_EXTERN void EmitAsyncDestroy(v8::Isolate* isolate,
596601
async_context asyncContext);
@@ -702,6 +707,16 @@ class AsyncResource {
702707
trigger_async_id);
703708
}
704709

710+
AsyncResource(v8::Isolate* isolate,
711+
v8::Local<v8::Object> resource,
712+
v8::Local<v8::String> name,
713+
async_id trigger_async_id = -1)
714+
: isolate_(isolate),
715+
resource_(isolate, resource) {
716+
async_context_ = EmitAsyncInit(isolate, resource, name,
717+
trigger_async_id);
718+
}
719+
705720
~AsyncResource() {
706721
EmitAsyncDestroy(isolate_, async_context_);
707722
}

src/node_api.cc

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -3259,7 +3259,7 @@ class Work : public node::AsyncResource {
32593259
private:
32603260
explicit Work(napi_env env,
32613261
v8::Local<v8::Object> async_resource,
3262-
const char* async_resource_name,
3262+
v8::Local<v8::String> async_resource_name,
32633263
napi_async_execute_callback execute,
32643264
napi_async_complete_callback complete = nullptr,
32653265
void* data = nullptr)
@@ -3279,7 +3279,7 @@ class Work : public node::AsyncResource {
32793279
public:
32803280
static Work* New(napi_env env,
32813281
v8::Local<v8::Object> async_resource,
3282-
const char* async_resource_name,
3282+
v8::Local<v8::String> async_resource_name,
32833283
napi_async_execute_callback execute,
32843284
napi_async_complete_callback complete,
32853285
void* data) {
@@ -3349,7 +3349,7 @@ class Work : public node::AsyncResource {
33493349

33503350
napi_status napi_create_async_work(napi_env env,
33513351
napi_value async_resource,
3352-
const char* async_resource_name,
3352+
napi_value async_resource_name,
33533353
napi_async_execute_callback execute,
33543354
napi_async_complete_callback complete,
33553355
void* data,
@@ -3358,17 +3358,20 @@ napi_status napi_create_async_work(napi_env env,
33583358
CHECK_ARG(env, execute);
33593359
CHECK_ARG(env, result);
33603360

3361+
v8::Local<v8::Context> context = env->isolate->GetCurrentContext();
3362+
33613363
v8::Local<v8::Object> resource;
33623364
if (async_resource != nullptr) {
3363-
auto value = v8impl::V8LocalValueFromJsValue(async_resource);
3364-
RETURN_STATUS_IF_FALSE(env, value->IsObject(), napi_invalid_arg);
3365-
resource = value.As<v8::Object>();
3365+
CHECK_TO_OBJECT(env, context, resource, async_resource);
33663366
} else {
33673367
resource = v8::Object::New(env->isolate);
33683368
}
33693369

3370+
v8::Local<v8::String> resource_name;
3371+
CHECK_TO_STRING(env, context, resource_name, async_resource_name);
3372+
33703373
uvimpl::Work* work =
3371-
uvimpl::Work::New(env, resource, async_resource_name,
3374+
uvimpl::Work::New(env, resource, resource_name,
33723375
execute, complete, data);
33733376

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

src/node_api.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -523,7 +523,7 @@ NAPI_EXTERN napi_status napi_get_dataview_info(napi_env env,
523523
NAPI_EXTERN
524524
napi_status napi_create_async_work(napi_env env,
525525
napi_value async_resource,
526-
const char* async_resource_name,
526+
napi_value async_resource_name,
527527
napi_async_execute_callback execute,
528528
napi_async_complete_callback complete,
529529
void* data,

test/addons-napi/test_async/test_async.cc

Lines changed: 11 additions & 3 deletions
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)