@@ -97,23 +97,24 @@ struct FinalizerContext {
97
97
void napi_env__::CallFinalizer (
98
98
const node_api_native_data& native_data) noexcept {
99
99
if (refs > 0 ) {
100
- if (native_data.finalizer_type == node_api_finalizer_uses_js) {
100
+ if ((native_data.flags & node_api_native_data_flags_finalize_uses_js) !=
101
+ 0 ) {
101
102
CallFinalizerAsync (native_data);
102
103
} else {
103
104
// Run finalizers synchronously to allow release native objects as soon as
104
105
// possible. No JS calls are allowed.
105
106
v8impl::FinalizerContext finalizerContext (this );
106
107
CallIntoModule (
107
108
[native_data](napi_env env) {
108
- native_data.finalizer (
109
- env, native_data.data , native_data.finalizer_state );
109
+ native_data.finalize_cb (
110
+ env, native_data.data , native_data.finalize_hint );
110
111
},
111
112
v8impl::FinalizerContext::AbortOnError);
112
113
}
113
114
} else {
114
115
v8::HandleScope handle_scope (isolate);
115
116
CallIntoModule ([native_data](napi_env env) {
116
- native_data.finalizer (env, native_data.data , native_data.finalizer_state );
117
+ native_data.finalize_cb (env, native_data.data , native_data.finalize_hint );
117
118
});
118
119
}
119
120
}
@@ -129,7 +130,7 @@ void napi_env__::CallFinalizerAsync(
129
130
v8::HandleScope handle_scope (env->isolate );
130
131
v8::Context::Scope context_scope (env->context ());
131
132
env->CallIntoModule ([&native_data](napi_env env) {
132
- native_data.finalizer (env, native_data.data , native_data.finalizer_state );
133
+ native_data.finalize_cb (env, native_data.data , native_data.finalize_hint );
133
134
});
134
135
});
135
136
}
@@ -333,13 +334,9 @@ class CallbackBundle {
333
334
bundle->env = env;
334
335
335
336
v8::Local<v8::Value> cbdata = v8::External::New (env->isolate , bundle);
336
- Reference::New (
337
- env,
338
- cbdata,
339
- 0 ,
340
- true ,
341
- MakeNativeData (
342
- bundle, Delete, nullptr , node_api_finalizer_native_only));
337
+ node_api_native_data native_data = MakeNativeData (
338
+ bundle, Delete, nullptr , node_api_native_data_flags_none);
339
+ Reference::New (env, cbdata, 0 , true , native_data);
343
340
return cbdata;
344
341
}
345
342
@@ -513,7 +510,7 @@ inline napi_status Wrap(napi_env env,
513
510
napi_invalid_arg);
514
511
} else if (wrap_type == anonymous) {
515
512
// If no finalize callback is provided, we error out.
516
- CHECK_ARG (env, native_data->finalizer );
513
+ CHECK_ARG (env, native_data->finalize_cb );
517
514
}
518
515
519
516
v8impl::Reference* reference = nullptr ;
@@ -522,7 +519,7 @@ inline napi_status Wrap(napi_env env,
522
519
// ONLY in response to the finalize callback invocation. (If it is deleted
523
520
// before then, then the finalize callback will never be invoked.)
524
521
// Therefore a finalize callback is required when returning a reference.
525
- CHECK_ARG (env, native_data->finalizer );
522
+ CHECK_ARG (env, native_data->finalize_cb );
526
523
reference = v8impl::Reference::New (env, obj, 0 , false , *native_data);
527
524
*result = reinterpret_cast <napi_ref>(reference);
528
525
} else {
@@ -550,8 +547,8 @@ RefBase::RefBase(napi_env env,
550
547
: Finalizer(env, native_data),
551
548
_refcount(initial_refcount),
552
549
_delete_self(delete_self) {
553
- Link (native_data.finalizer == nullptr ? &env->reflist
554
- : &env->finalizing_reflist );
550
+ Link (native_data.finalize_cb == nullptr ? &env->reflist
551
+ : &env->finalizing_reflist );
555
552
}
556
553
557
554
RefBase* RefBase::New (napi_env env,
@@ -638,7 +635,7 @@ void RefBase::Finalize(bool is_env_teardown) {
638
635
MakeNativeData (_finalize_data,
639
636
std::exchange (_finalize_callback, nullptr ),
640
637
_finalize_hint,
641
- _finalizer_type ));
638
+ _finalize_flags ));
642
639
}
643
640
644
641
// this is safe because if a request to delete the reference
@@ -2413,7 +2410,10 @@ napi_status napi_wrap(napi_env env,
2413
2410
void * finalize_hint,
2414
2411
napi_ref* result) {
2415
2412
node_api_native_data native_data =
2416
- v8impl::MakeNativeData (native_object, finalize_cb, finalize_hint);
2413
+ v8impl::MakeNativeData (native_object,
2414
+ finalize_cb,
2415
+ finalize_hint,
2416
+ node_api_native_data_flags_finalize_uses_js);
2417
2417
return v8impl::Wrap<v8impl::retrievable>(
2418
2418
env, js_object, &native_data, result);
2419
2419
}
@@ -2438,8 +2438,12 @@ napi_status napi_create_external(napi_env env,
2438
2438
napi_finalize finalize_cb,
2439
2439
void * finalize_hint,
2440
2440
napi_value* result) {
2441
- return node_api_create_external (
2442
- env, &v8impl::MakeNativeData (data, finalize_cb, finalize_hint), result);
2441
+ node_api_native_data native_data =
2442
+ v8impl::MakeNativeData (data,
2443
+ finalize_cb,
2444
+ finalize_hint,
2445
+ node_api_native_data_flags_finalize_uses_js);
2446
+ return node_api_create_external (env, &native_data, result);
2443
2447
}
2444
2448
2445
2449
napi_status node_api_create_external (napi_env env,
@@ -3236,7 +3240,10 @@ napi_status napi_add_finalizer(napi_env env,
3236
3240
void * finalize_hint,
3237
3241
napi_ref* result) {
3238
3242
node_api_native_data native_data =
3239
- v8impl::MakeNativeData (native_object, finalize_cb, finalize_hint);
3243
+ v8impl::MakeNativeData (native_object,
3244
+ finalize_cb,
3245
+ finalize_hint,
3246
+ node_api_native_data_flags_finalize_uses_js);
3240
3247
return v8impl::Wrap<v8impl::anonymous>(env, js_object, &native_data, result);
3241
3248
}
3242
3249
@@ -3263,8 +3270,12 @@ napi_status napi_set_instance_data(napi_env env,
3263
3270
void * data,
3264
3271
napi_finalize finalize_cb,
3265
3272
void * finalize_hint) {
3266
- return node_api_set_instance_data (
3267
- env, &v8impl::MakeNativeData (data, finalize_cb, finalize_hint));
3273
+ node_api_native_data native_data =
3274
+ v8impl::MakeNativeData (data,
3275
+ finalize_cb,
3276
+ finalize_hint,
3277
+ node_api_native_data_flags_finalize_uses_js);
3278
+ return node_api_set_instance_data (env, &native_data);
3268
3279
}
3269
3280
3270
3281
napi_status node_api_set_instance_data (napi_env env,
0 commit comments