Skip to content

Commit 236ef28

Browse files
committed
squash! review feedback
1 parent 5d2dd37 commit 236ef28

File tree

4 files changed

+55
-58
lines changed

4 files changed

+55
-58
lines changed

doc/api/n-api.md

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -2575,32 +2575,32 @@ object just created has been garbage collected.
25752575
JavaScript `ArrayBuffer`s are described in
25762576
[Section ArrayBuffer objects][] of the ECMAScript Language Specification.
25772577

2578-
#### `napi_create_external_sharedarraybuffer`
2578+
#### `node_api_create_external_sharedarraybuffer`
25792579

25802580
<!-- YAML
25812581
added: REPLACEME
2582-
napiVersion: 1
25832582
-->
25842583

25852584
```c
25862585
napi_status
2587-
napi_create_external_sharedarraybuffer(napi_env env,
2588-
void* external_data,
2589-
size_t byte_length,
2590-
void (*finalize_cb)(
2591-
void* external_data,
2592-
void* finalize_hint),
2593-
void* finalize_hint,
2594-
napi_value* result)
2586+
node_api_create_external_sharedarraybuffer(napi_env env,
2587+
void* external_data,
2588+
size_t byte_length,
2589+
void (*finalize_cb)(
2590+
void* external_data,
2591+
void* finalize_hint),
2592+
void* finalize_hint,
2593+
napi_value* result)
25952594
```
25962595

25972596
* `[in] env`: The environment that the API is invoked under.
25982597
* `[in] external_data`: Pointer to the underlying byte buffer of the
25992598
`SharedArrayBuffer`.
26002599
* `[in] byte_length`: The length in bytes of the underlying buffer.
26012600
* `[in] finalize_cb`: Optional callback to call when the `SharedArrayBuffer` is
2602-
being collected. Because a `SharedArrayBuffer` can outlive the environment
2603-
it was created in, the callback does not get receive a reference to `env`.
2601+
being collected. Called on an arbitrary thread. Because a `SharedArrayBuffer`
2602+
can outlive the environment it's created in, the callback does not receive a
2603+
reference to `env`.
26042604
* `[in] finalize_hint`: Optional hint to pass to the finalize callback during
26052605
collection.
26062606
* `[out] result`: A `napi_value` representing a JavaScript `SharedArrayBuffer`.

src/js_native_api.h

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -437,13 +437,16 @@ napi_create_external_arraybuffer(napi_env env,
437437
node_api_basic_finalize finalize_cb,
438438
void* finalize_hint,
439439
napi_value* result);
440-
NAPI_EXTERN napi_status NAPI_CDECL napi_create_external_sharedarraybuffer(
440+
#ifdef NAPI_EXPERIMENTAL
441+
#define NODE_API_EXPERIMENTAL_HAS_CREATE_EXTERNAL_SHAREDARRAYBUFFER
442+
NAPI_EXTERN napi_status NAPI_CDECL node_api_create_external_sharedarraybuffer(
441443
napi_env env,
442444
void* external_data,
443445
size_t byte_length,
444446
void (*finalize_cb)(void* external_data, void* finalize_hint),
445447
void* finalize_hint,
446448
napi_value* result);
449+
#endif // NAPI_EXPERIMENTAL
447450
#endif // NODE_API_NO_EXTERNAL_BUFFERS_ALLOWED
448451
NAPI_EXTERN napi_status NAPI_CDECL napi_get_arraybuffer_info(
449452
napi_env env, napi_value arraybuffer, void** data, size_t* byte_length);

src/js_native_api_v8.cc

Lines changed: 33 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -136,42 +136,6 @@ napi_status NewExternalString(napi_env env,
136136
return status;
137137
}
138138

139-
napi_status NewExternalSharedArrayBuffer(
140-
napi_env env,
141-
void* external_data,
142-
size_t byte_length,
143-
void (*finalize_cb)(void* external_data, void* finalize_hint),
144-
void* finalize_hint,
145-
napi_value* result) {
146-
struct FinalizerData {
147-
void (*cb)(void* external_data, void* finalize_hint);
148-
void* hint;
149-
};
150-
auto deleter = [](void* external_data, size_t length, void* deleter_data) {
151-
if (auto fd = static_cast<FinalizerData*>(deleter_data)) {
152-
fd->cb(external_data, fd->hint);
153-
delete fd;
154-
}
155-
};
156-
FinalizerData* deleter_data = nullptr;
157-
if (finalize_cb != nullptr) {
158-
deleter_data = new FinalizerData{finalize_cb, finalize_hint};
159-
}
160-
auto unique_backing_store = v8::SharedArrayBuffer::NewBackingStore(
161-
external_data,
162-
byte_length,
163-
deleter,
164-
reinterpret_cast<void*>(deleter_data));
165-
CHECK(!!unique_backing_store); // Cannot fail.
166-
auto shared_backing_store =
167-
std::shared_ptr<v8::BackingStore>(std::move(unique_backing_store));
168-
auto shared_array_buffer =
169-
v8::SharedArrayBuffer::New(env->isolate, shared_backing_store);
170-
CHECK_MAYBE_EMPTY(env, shared_array_buffer, napi_generic_failure);
171-
*result = v8impl::JsValueFromV8LocalValue(shared_array_buffer);
172-
return napi_clear_last_error(env);
173-
}
174-
175139
class TrackedStringResource : private RefTracker {
176140
public:
177141
TrackedStringResource(napi_env env,
@@ -3170,15 +3134,45 @@ napi_create_external_arraybuffer(napi_env env,
31703134
env, buffer, nullptr, nullptr, nullptr, result, nullptr);
31713135
}
31723136

3173-
napi_status NAPI_CDECL napi_create_external_sharedarraybuffer(
3137+
napi_status NAPI_CDECL node_api_create_external_sharedarraybuffer(
31743138
napi_env env,
31753139
void* external_data,
31763140
size_t byte_length,
31773141
void (*finalize_cb)(void* external_data, void* finalize_hint),
31783142
void* finalize_hint,
31793143
napi_value* result) {
3180-
return v8impl::NewExternalSharedArrayBuffer(
3181-
env, external_data, byte_length, finalize_cb, finalize_hint, result);
3144+
#ifdef V8_ENABLE_SANDBOX
3145+
return napi_set_last_error(env, napi_no_external_buffers_allowed);
3146+
#else
3147+
struct FinalizerData {
3148+
void (*cb)(void* external_data, void* finalize_hint);
3149+
void* hint;
3150+
};
3151+
auto deleter = [](void* external_data, size_t length, void* deleter_data) {
3152+
if (auto fd = static_cast<FinalizerData*>(deleter_data)) {
3153+
fd->cb(external_data, fd->hint);
3154+
delete fd;
3155+
}
3156+
};
3157+
FinalizerData* deleter_data = nullptr;
3158+
if (finalize_cb != nullptr) {
3159+
deleter_data = new FinalizerData{finalize_cb, finalize_hint};
3160+
}
3161+
auto unique_backing_store = v8::SharedArrayBuffer::NewBackingStore(
3162+
external_data,
3163+
byte_length,
3164+
deleter,
3165+
reinterpret_cast<void*>(deleter_data));
3166+
CHECK(!!unique_backing_store); // Cannot fail.
3167+
auto shared_backing_store =
3168+
std::shared_ptr<v8::BackingStore>(std::move(unique_backing_store));
3169+
auto shared_array_buffer = v8::SharedArrayBuffer::New(
3170+
env->isolate,
3171+
std::move(shared_backing_store));
3172+
CHECK_MAYBE_EMPTY(env, shared_array_buffer, napi_generic_failure);
3173+
*result = v8impl::JsValueFromV8LocalValue(shared_array_buffer);
3174+
return napi_clear_last_error(env);
3175+
#endif // V8_ENABLE_SANDBOX
31823176
}
31833177

31843178
napi_status NAPI_CDECL napi_get_arraybuffer_info(napi_env env,

test/node-api/test_buffer/test_buffer.c

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -73,12 +73,12 @@ static napi_value newExternalSharedArrayBuffer(napi_env env,
7373
napi_value sab;
7474
NODE_API_CALL(
7575
env,
76-
napi_create_external_sharedarraybuffer(env,
77-
externalSharedArrayBufferData,
78-
1,
79-
freeExternalSharedArrayBuffer,
80-
NULL,
81-
&sab));
76+
node_api_create_external_sharedarraybuffer(env,
77+
externalSharedArrayBufferData,
78+
1,
79+
freeExternalSharedArrayBuffer,
80+
NULL,
81+
&sab));
8282
return sab;
8383
}
8484

0 commit comments

Comments
 (0)