Skip to content

Commit

Permalink
use synchronous finalizer with node_api_post_finalizer in bufferFromA…
Browse files Browse the repository at this point in the history
…rrayBuffer
  • Loading branch information
Mert Can Altin committed Sep 19, 2024
1 parent 7e4b85c commit 6d6ade8
Showing 1 changed file with 15 additions and 31 deletions.
46 changes: 15 additions & 31 deletions test/node-api/test_buffer/test_buffer.c
Original file line number Diff line number Diff line change
Expand Up @@ -122,6 +122,19 @@ static napi_value invalidObjectAsBuffer(napi_env env, napi_callback_info info) {

return notTheBuffer;
}

static void finalizeBuffer(const napi_env* env,
void* data,
void* finalize_hint) {
node_api_post_finalizer(env, data, finalize_hint, jsCallback);
}

void jsCallback(napi_env env, void* finalize_data, void* finalize_hint) {
(void)finalize_hint;
free(finalize_data);
deleterCallCount++;
}

static napi_value bufferFromArrayBuffer(napi_env env, napi_callback_info info) {
napi_status status;
napi_value arraybuffer;
Expand All @@ -138,38 +151,9 @@ static napi_value bufferFromArrayBuffer(napi_env env, napi_callback_info info) {
NODE_API_ASSERT(
env, status == napi_ok, "Failed to create buffer from arraybuffer");

void* buffer_data;
size_t buffer_length;
status = napi_get_buffer_info(env, buffer, &buffer_data, &buffer_length);
NODE_API_ASSERT(env, status == napi_ok, "Failed to get buffer info");
NODE_API_ASSERT(env, buffer_length == byte_length, "Buffer length mismatch");

bool is_buffer;
status = napi_is_buffer(env, buffer, &is_buffer);
NODE_API_ASSERT(env, status == napi_ok, "Failed to check if value is buffer");
NODE_API_ASSERT(env, is_buffer, "Expected a Buffer but did not get one");

status = node_api_create_buffer_from_arraybuffer(
env, arraybuffer, byte_length, byte_length + 1, &buffer);
NODE_API_ASSERT(env,
status == napi_throw_range_error(
env,
"ERR_OUT_OF_RANGE",
"The byte offset + length is out of range"),
"Expected range error for invalid byte offset");

napi_value non_arraybuffer;
status = napi_create_uint32(env, 123, &non_arraybuffer);
NODE_API_ASSERT(
env, status == napi_ok, "Failed to create non-arraybuffer value");

status = node_api_create_buffer_from_arraybuffer(
env, non_arraybuffer, byte_offset, byte_length, &buffer);
NODE_API_ASSERT(env,
status == napi_invalid_arg,
"Expected invalid arg error for non-arraybuffer input");
napi_add_finalizer(env, buffer, data, finalizeBuffer, NULL, NULL);

return arraybuffer;
return buffer;
}

static napi_value Init(napi_env env, napi_value exports) {
Expand Down

0 comments on commit 6d6ade8

Please sign in to comment.