Skip to content

Commit 83a2e50

Browse files
committed
test: schedule the finalizer for not running while gc
Normally adding a finalizer that changes gc state, crash Node.js. So we add a middle layer for not running the finalizer while gc.
1 parent 94a2221 commit 83a2e50

File tree

1 file changed

+7
-1
lines changed

1 file changed

+7
-1
lines changed

test/js-native-api/test_general/test_general.c

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -252,6 +252,12 @@ static void finalizer_only_callback(napi_env env, void* data, void* hint) {
252252
NODE_API_CALL_RETURN_VOID(env, napi_delete_reference(env, js_cb_ref));
253253
}
254254

255+
static void schedule_finalizer_only_callback(node_api_nogc_env env, void* data, void* hint) {
256+
NODE_API_CALL_RETURN_VOID((napi_env)env,
257+
node_api_post_finalizer(
258+
(napi_env)env, finalizer_only_callback, data, NULL));
259+
}
260+
255261
static napi_value add_finalizer_only(napi_env env, napi_callback_info info) {
256262
size_t argc = 2;
257263
napi_value argv[2];
@@ -261,7 +267,7 @@ static napi_value add_finalizer_only(napi_env env, napi_callback_info info) {
261267
NODE_API_CALL(env, napi_create_reference(env, argv[1], 1, &js_cb_ref));
262268
NODE_API_CALL(env,
263269
napi_add_finalizer(
264-
env, argv[0], js_cb_ref, finalizer_only_callback, NULL, NULL));
270+
env, argv[0], js_cb_ref, schedule_finalizer_only_callback, NULL, NULL));
265271
return NULL;
266272
}
267273

0 commit comments

Comments
 (0)