emnapi 1.11.0 → 1.11.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/library_napi.js +67 -46
- package/include/node/emnapi.h +1 -1
- package/package.json +1 -1
package/dist/library_napi.js
CHANGED
|
@@ -5858,7 +5858,7 @@ var emnapiTSFN = {
|
|
|
5858
5858
|
var payload = __emnapi__.payload;
|
|
5859
5859
|
if (type === 'tsfn-send') {
|
|
5860
5860
|
var pendng = payload.tsfn + emnapiTSFN.offset.async_pending;
|
|
5861
|
-
if (Atomics.load(new Int32Array(
|
|
5861
|
+
if (Atomics.load(new Int32Array(emnapiTSFN.ensureBufferFor(pendng + 4)), pendng >>> 2) !== 0) {
|
|
5862
5862
|
emnapiTSFN.enqueue(payload.tsfn);
|
|
5863
5863
|
}
|
|
5864
5864
|
}
|
|
@@ -5882,13 +5882,28 @@ var emnapiTSFN = {
|
|
|
5882
5882
|
}
|
|
5883
5883
|
return true;
|
|
5884
5884
|
},
|
|
5885
|
+
/**
|
|
5886
|
+
* When another thread grows the shared WebAssembly.Memory, this agent's
|
|
5887
|
+
* cached `wasmMemory.buffer` may still have the old shorter length
|
|
5888
|
+
* (V8 refreshes it lazily). If a pointer derived from shared memory lies
|
|
5889
|
+
* beyond the cached length, `wasmMemory.grow(0)` forces the agent to
|
|
5890
|
+
* observe the current memory size and refreshes the buffer.
|
|
5891
|
+
*/
|
|
5892
|
+
ensureBufferFor: function (end) {
|
|
5893
|
+
var buffer = wasmMemory.buffer;
|
|
5894
|
+
if (end > buffer.byteLength) {
|
|
5895
|
+
wasmMemory.grow(0);
|
|
5896
|
+
buffer = wasmMemory.buffer;
|
|
5897
|
+
}
|
|
5898
|
+
return buffer;
|
|
5899
|
+
},
|
|
5885
5900
|
initQueue: function (func) {
|
|
5886
5901
|
var size = 2 * {{{ POINTER_SIZE }}};
|
|
5887
5902
|
var queue = _malloc({{{ to64('size') }}});
|
|
5888
5903
|
if (!queue)
|
|
5889
5904
|
return false;
|
|
5890
5905
|
{{{ from64('queue') }}};
|
|
5891
|
-
new Uint8Array(
|
|
5906
|
+
new Uint8Array(emnapiTSFN.ensureBufferFor(queue + size), queue, size).fill(0);
|
|
5892
5907
|
emnapiTSFN.storeSizeTypeValue(func + emnapiTSFN.offset.queue, queue, false);
|
|
5893
5908
|
return true;
|
|
5894
5909
|
},
|
|
@@ -5995,7 +6010,7 @@ var emnapiTSFN = {
|
|
|
5995
6010
|
var mutex = {
|
|
5996
6011
|
lock: function () {
|
|
5997
6012
|
var isBrowserMain = typeof window !== 'undefined' && typeof document !== 'undefined' && !ENVIRONMENT_IS_NODE;
|
|
5998
|
-
var i32a = new Int32Array(
|
|
6013
|
+
var i32a = new Int32Array(emnapiTSFN.ensureBufferFor(index + 4), index, 1);
|
|
5999
6014
|
if (isBrowserMain) {
|
|
6000
6015
|
while (true) {
|
|
6001
6016
|
var oldValue = Atomics.compareExchange(i32a, 0, 0, 10);
|
|
@@ -6018,7 +6033,7 @@ var emnapiTSFN = {
|
|
|
6018
6033
|
return new Promise<void>(resolve => {
|
|
6019
6034
|
const again = (): void => { fn() }
|
|
6020
6035
|
const fn = (): void => {
|
|
6021
|
-
const i32a = new Int32Array(
|
|
6036
|
+
const i32a = new Int32Array(emnapiTSFN.ensureBufferFor(index + 4), index, 1)
|
|
6022
6037
|
const oldValue = Atomics.compareExchange(i32a, 0, 0, 10)
|
|
6023
6038
|
if (oldValue === 0) {
|
|
6024
6039
|
resolve()
|
|
@@ -6030,7 +6045,7 @@ var emnapiTSFN = {
|
|
|
6030
6045
|
})
|
|
6031
6046
|
}, */
|
|
6032
6047
|
unlock: function () {
|
|
6033
|
-
var i32a = new Int32Array(
|
|
6048
|
+
var i32a = new Int32Array(emnapiTSFN.ensureBufferFor(index + 4), index, 1);
|
|
6034
6049
|
var oldValue = Atomics.compareExchange(i32a, 0, 10, 0);
|
|
6035
6050
|
if (oldValue !== 10) {
|
|
6036
6051
|
throw new Error('Tried to unlock while not holding the mutex');
|
|
@@ -6064,14 +6079,14 @@ var emnapiTSFN = {
|
|
|
6064
6079
|
var mutex = emnapiTSFN.getMutex(func);
|
|
6065
6080
|
var cond = {
|
|
6066
6081
|
wait: function () {
|
|
6067
|
-
var i32a = new Int32Array(
|
|
6082
|
+
var i32a = new Int32Array(emnapiTSFN.ensureBufferFor(index + 4), index, 1);
|
|
6068
6083
|
var value = Atomics.load(i32a, 0);
|
|
6069
6084
|
mutex.unlock();
|
|
6070
6085
|
Atomics.wait(i32a, 0, value);
|
|
6071
6086
|
mutex.lock();
|
|
6072
6087
|
},
|
|
6073
6088
|
/* waitAsync () {
|
|
6074
|
-
const i32a = new Int32Array(
|
|
6089
|
+
const i32a = new Int32Array(emnapiTSFN.ensureBufferFor(index + 4), index, 1)
|
|
6075
6090
|
const value = Atomics.load(i32a, 0)
|
|
6076
6091
|
mutex.unlock()
|
|
6077
6092
|
const lock = (): Promise<void> => mutex.lockAsync()
|
|
@@ -6082,7 +6097,7 @@ var emnapiTSFN = {
|
|
|
6082
6097
|
}
|
|
6083
6098
|
}, */
|
|
6084
6099
|
signal: function () {
|
|
6085
|
-
var i32a = new Int32Array(
|
|
6100
|
+
var i32a = new Int32Array(emnapiTSFN.ensureBufferFor(index + 4), index, 1);
|
|
6086
6101
|
Atomics.add(i32a, 0, 1);
|
|
6087
6102
|
Atomics.notify(i32a, 0, 1);
|
|
6088
6103
|
}
|
|
@@ -6096,10 +6111,10 @@ var emnapiTSFN = {
|
|
|
6096
6111
|
var offset = emnapiTSFN.offset.queue_size;
|
|
6097
6112
|
var arr, index;
|
|
6098
6113
|
#if MEMORY64
|
|
6099
|
-
arr = new BigUint64Array(
|
|
6114
|
+
arr = new BigUint64Array(emnapiTSFN.ensureBufferFor(func + offset + 8));
|
|
6100
6115
|
index = (func + offset) >>> 3;
|
|
6101
6116
|
#else
|
|
6102
|
-
arr = new Uint32Array(
|
|
6117
|
+
arr = new Uint32Array(emnapiTSFN.ensureBufferFor(func + offset + 4));
|
|
6103
6118
|
index = (func + offset) >>> 2;
|
|
6104
6119
|
#endif
|
|
6105
6120
|
Atomics.add(arr, index, {{{ to64('1') }}});
|
|
@@ -6108,10 +6123,10 @@ var emnapiTSFN = {
|
|
|
6108
6123
|
var offset = emnapiTSFN.offset.queue_size;
|
|
6109
6124
|
var arr, index;
|
|
6110
6125
|
#if MEMORY64
|
|
6111
|
-
arr = new BigUint64Array(
|
|
6126
|
+
arr = new BigUint64Array(emnapiTSFN.ensureBufferFor(func + offset + 8));
|
|
6112
6127
|
index = (func + offset) >>> 3;
|
|
6113
6128
|
#else
|
|
6114
|
-
arr = new Uint32Array(
|
|
6129
|
+
arr = new Uint32Array(emnapiTSFN.ensureBufferFor(func + offset + 4));
|
|
6115
6130
|
index = (func + offset) >>> 2;
|
|
6116
6131
|
#endif
|
|
6117
6132
|
Atomics.sub(arr, index, {{{ to64('1') }}});
|
|
@@ -6123,10 +6138,10 @@ var emnapiTSFN = {
|
|
|
6123
6138
|
var offset = emnapiTSFN.offset.thread_count;
|
|
6124
6139
|
var arr, index;
|
|
6125
6140
|
#if MEMORY64
|
|
6126
|
-
arr = new BigUint64Array(
|
|
6141
|
+
arr = new BigUint64Array(emnapiTSFN.ensureBufferFor(func + offset + 8));
|
|
6127
6142
|
index = (func + offset) >>> 3;
|
|
6128
6143
|
#else
|
|
6129
|
-
arr = new Uint32Array(
|
|
6144
|
+
arr = new Uint32Array(emnapiTSFN.ensureBufferFor(func + offset + 4));
|
|
6130
6145
|
index = (func + offset) >>> 2;
|
|
6131
6146
|
#endif
|
|
6132
6147
|
Atomics.add(arr, index, {{{ to64('1') }}});
|
|
@@ -6135,28 +6150,28 @@ var emnapiTSFN = {
|
|
|
6135
6150
|
var offset = emnapiTSFN.offset.thread_count;
|
|
6136
6151
|
var arr, index;
|
|
6137
6152
|
#if MEMORY64
|
|
6138
|
-
arr = new BigUint64Array(
|
|
6153
|
+
arr = new BigUint64Array(emnapiTSFN.ensureBufferFor(func + offset + 8));
|
|
6139
6154
|
index = (func + offset) >>> 3;
|
|
6140
6155
|
#else
|
|
6141
|
-
arr = new Uint32Array(
|
|
6156
|
+
arr = new Uint32Array(emnapiTSFN.ensureBufferFor(func + offset + 4));
|
|
6142
6157
|
index = (func + offset) >>> 2;
|
|
6143
6158
|
#endif
|
|
6144
6159
|
Atomics.sub(arr, index, {{{ to64('1') }}});
|
|
6145
6160
|
},
|
|
6146
6161
|
getState: function (func) {
|
|
6147
|
-
return Atomics.load(new Int32Array(
|
|
6162
|
+
return Atomics.load(new Int32Array(emnapiTSFN.ensureBufferFor(func + emnapiTSFN.offset.state + 4)), (func + emnapiTSFN.offset.state) >>> 2);
|
|
6148
6163
|
},
|
|
6149
6164
|
setState: function (func, value) {
|
|
6150
|
-
Atomics.store(new Int32Array(
|
|
6165
|
+
Atomics.store(new Int32Array(emnapiTSFN.ensureBufferFor(func + emnapiTSFN.offset.state + 4)), (func + emnapiTSFN.offset.state) >>> 2, value);
|
|
6151
6166
|
},
|
|
6152
6167
|
getHandlesClosing: function (func) {
|
|
6153
|
-
return Atomics.load(new Int8Array(
|
|
6168
|
+
return Atomics.load(new Int8Array(emnapiTSFN.ensureBufferFor(func + emnapiTSFN.offset.handles_closing + 1)), (func + emnapiTSFN.offset.handles_closing));
|
|
6154
6169
|
},
|
|
6155
6170
|
setHandlesClosing: function (func, value) {
|
|
6156
|
-
Atomics.store(new Int8Array(
|
|
6171
|
+
Atomics.store(new Int8Array(emnapiTSFN.ensureBufferFor(func + emnapiTSFN.offset.handles_closing + 1)), (func + emnapiTSFN.offset.handles_closing), value);
|
|
6157
6172
|
},
|
|
6158
6173
|
getDispatchState: function (func) {
|
|
6159
|
-
return Atomics.load(new Uint32Array(
|
|
6174
|
+
return Atomics.load(new Uint32Array(emnapiTSFN.ensureBufferFor(func + emnapiTSFN.offset.dispatch_state + 4)), (func + emnapiTSFN.offset.dispatch_state) >>> 2);
|
|
6160
6175
|
},
|
|
6161
6176
|
getContext: function (func) {
|
|
6162
6177
|
return emnapiTSFN.loadSizeTypeValue(func + emnapiTSFN.offset.context, false);
|
|
@@ -6187,20 +6202,20 @@ var emnapiTSFN = {
|
|
|
6187
6202
|
var arr;
|
|
6188
6203
|
if (unsigned) {
|
|
6189
6204
|
#if MEMORY64
|
|
6190
|
-
arr = new BigUint64Array(
|
|
6205
|
+
arr = new BigUint64Array(emnapiTSFN.ensureBufferFor(offset + 8));
|
|
6191
6206
|
ret = Number(Atomics.load(arr, offset >>> 3));
|
|
6192
6207
|
#else
|
|
6193
|
-
arr = new Uint32Array(
|
|
6208
|
+
arr = new Uint32Array(emnapiTSFN.ensureBufferFor(offset + 4));
|
|
6194
6209
|
ret = Atomics.load(arr, offset >>> 2);
|
|
6195
6210
|
#endif
|
|
6196
6211
|
return ret;
|
|
6197
6212
|
}
|
|
6198
6213
|
else {
|
|
6199
6214
|
#if MEMORY64
|
|
6200
|
-
arr = new BigInt64Array(
|
|
6215
|
+
arr = new BigInt64Array(emnapiTSFN.ensureBufferFor(offset + 8));
|
|
6201
6216
|
ret = Number(Atomics.load(arr, offset >>> 3));
|
|
6202
6217
|
#else
|
|
6203
|
-
arr = new Int32Array(
|
|
6218
|
+
arr = new Int32Array(emnapiTSFN.ensureBufferFor(offset + 4));
|
|
6204
6219
|
ret = Atomics.load(arr, offset >>> 2);
|
|
6205
6220
|
#endif
|
|
6206
6221
|
return ret;
|
|
@@ -6210,20 +6225,20 @@ var emnapiTSFN = {
|
|
|
6210
6225
|
var arr;
|
|
6211
6226
|
if (unsigned) {
|
|
6212
6227
|
#if MEMORY64
|
|
6213
|
-
arr = new BigUint64Array(
|
|
6228
|
+
arr = new BigUint64Array(emnapiTSFN.ensureBufferFor(offset + 8));
|
|
6214
6229
|
Atomics.store(arr, offset >>> 3, BigInt(value));
|
|
6215
6230
|
#else
|
|
6216
|
-
arr = new Uint32Array(
|
|
6231
|
+
arr = new Uint32Array(emnapiTSFN.ensureBufferFor(offset + 4));
|
|
6217
6232
|
Atomics.store(arr, offset >>> 2, value);
|
|
6218
6233
|
#endif
|
|
6219
6234
|
return undefined;
|
|
6220
6235
|
}
|
|
6221
6236
|
else {
|
|
6222
6237
|
#if MEMORY64
|
|
6223
|
-
arr = new BigInt64Array(
|
|
6238
|
+
arr = new BigInt64Array(emnapiTSFN.ensureBufferFor(offset + 8));
|
|
6224
6239
|
Atomics.store(arr, offset >>> 3, BigInt(value >>> 0));
|
|
6225
6240
|
#else
|
|
6226
|
-
arr = new Int32Array(
|
|
6241
|
+
arr = new Int32Array(emnapiTSFN.ensureBufferFor(offset + 4));
|
|
6227
6242
|
Atomics.store(arr, offset >>> 2, value >>> 0);
|
|
6228
6243
|
#endif
|
|
6229
6244
|
return undefined;
|
|
@@ -6240,18 +6255,20 @@ var emnapiTSFN = {
|
|
|
6240
6255
|
}
|
|
6241
6256
|
var resource = emnapiTSFN.getResource(func);
|
|
6242
6257
|
emnapiCtx.refStore.get(resource).dispose();
|
|
6258
|
+
emnapiTSFN.ensureBufferFor(func + emnapiTSFN.offset.is_some + 1);
|
|
6243
6259
|
{{{ makeSetValue('func', 'emnapiTSFN.offset.is_some', '0', 'i8') }}};
|
|
6244
6260
|
emnapiCtx.removeCleanupHook(envObject, emnapiTSFN.cleanup, func);
|
|
6245
6261
|
envObject.unref();
|
|
6246
|
-
var
|
|
6247
|
-
var
|
|
6262
|
+
var asyncRefAddress = func + emnapiTSFN.offset.async_ref;
|
|
6263
|
+
var asyncRefOffset = asyncRefAddress >>> 2;
|
|
6264
|
+
var arr = new Uint32Array(emnapiTSFN.ensureBufferFor(asyncRefAddress + 4));
|
|
6248
6265
|
if (Atomics.load(arr, asyncRefOffset) > 0) {
|
|
6249
6266
|
Atomics.store(arr, asyncRefOffset, 0);
|
|
6250
6267
|
__emnapi_runtime_keepalive_pop();
|
|
6251
6268
|
emnapiCtx.decreaseWaitingRequestCounter();
|
|
6252
6269
|
}
|
|
6253
6270
|
if (emnapiNodeBinding) {
|
|
6254
|
-
var view = new DataView(
|
|
6271
|
+
var view = new DataView(emnapiTSFN.ensureBufferFor(func + emnapiTSFN.offset.trigger_async_id + 8));
|
|
6255
6272
|
var asyncId = view.getFloat64(func + emnapiTSFN.offset.async_id, true);
|
|
6256
6273
|
var triggerAsyncId = view.getFloat64(func + emnapiTSFN.offset.trigger_async_id, true);
|
|
6257
6274
|
__emnapi_node_emit_async_destroy(asyncId, triggerAsyncId);
|
|
@@ -6316,7 +6333,7 @@ var emnapiTSFN = {
|
|
|
6316
6333
|
var resource = emnapiTSFN.getResource(func);
|
|
6317
6334
|
var resource_value = emnapiCtx.refStore.get(resource).get();
|
|
6318
6335
|
var resourceObject = emnapiCtx.handleStore.get(resource_value).value;
|
|
6319
|
-
var view = new DataView(
|
|
6336
|
+
var view = new DataView(emnapiTSFN.ensureBufferFor(func + emnapiTSFN.offset.trigger_async_id + 8));
|
|
6320
6337
|
var asyncId = view.getFloat64(func + emnapiTSFN.offset.async_id, true);
|
|
6321
6338
|
var triggerAsyncId = view.getFloat64(func + emnapiTSFN.offset.trigger_async_id, true);
|
|
6322
6339
|
emnapiNodeBinding.node.makeCallback(resourceObject, f, [], {
|
|
@@ -6354,7 +6371,7 @@ var emnapiTSFN = {
|
|
|
6354
6371
|
return;
|
|
6355
6372
|
}
|
|
6356
6373
|
emnapiTSFN.setHandlesClosing(func, 1);
|
|
6357
|
-
Atomics.store(new Int32Array(
|
|
6374
|
+
Atomics.store(new Int32Array(emnapiTSFN.ensureBufferFor(func + emnapiTSFN.offset.async_pending + 4)), (func + emnapiTSFN.offset.async_pending) >>> 2, 1);
|
|
6358
6375
|
emnapiCtx.feature.setImmediate(function () {
|
|
6359
6376
|
emnapiTSFN.finalize(func);
|
|
6360
6377
|
});
|
|
@@ -6426,7 +6443,7 @@ var emnapiTSFN = {
|
|
|
6426
6443
|
var resource = emnapiTSFN.getResource(func);
|
|
6427
6444
|
var resource_value = emnapiCtx.refStore.get(resource).get();
|
|
6428
6445
|
var resourceObject = emnapiCtx.handleStore.get(resource_value).value;
|
|
6429
|
-
var view = new DataView(
|
|
6446
|
+
var view = new DataView(emnapiTSFN.ensureBufferFor(func + emnapiTSFN.offset.trigger_async_id + 8));
|
|
6430
6447
|
emnapiNodeBinding.node.makeCallback(resourceObject, f, [], {
|
|
6431
6448
|
asyncId: view.getFloat64(func + emnapiTSFN.offset.async_id, true),
|
|
6432
6449
|
triggerAsyncId: view.getFloat64(func + emnapiTSFN.offset.trigger_async_id, true)
|
|
@@ -6445,8 +6462,9 @@ var emnapiTSFN = {
|
|
|
6445
6462
|
dispatch: function (func) {
|
|
6446
6463
|
var has_more = true;
|
|
6447
6464
|
var iterations_left = 1000;
|
|
6448
|
-
var
|
|
6449
|
-
var
|
|
6465
|
+
var dispatchStateAddress = func + emnapiTSFN.offset.dispatch_state;
|
|
6466
|
+
var ui32a = new Uint32Array(emnapiTSFN.ensureBufferFor(dispatchStateAddress + 4));
|
|
6467
|
+
var index = dispatchStateAddress >>> 2;
|
|
6450
6468
|
while (has_more && --iterations_left !== 0) {
|
|
6451
6469
|
Atomics.store(ui32a, index, 1);
|
|
6452
6470
|
has_more = emnapiTSFN.dispatchOne(func);
|
|
@@ -6465,7 +6483,7 @@ var emnapiTSFN = {
|
|
|
6465
6483
|
// `scheduled` prevents queueing the same main-thread drain chain more than
|
|
6466
6484
|
// once while a previous wakeup is still in flight.
|
|
6467
6485
|
var scheduled = func + emnapiTSFN.offset.async_u_fd;
|
|
6468
|
-
var i32a = new Int32Array(
|
|
6486
|
+
var i32a = new Int32Array(emnapiTSFN.ensureBufferFor(Math.max(pending, scheduled) + 4));
|
|
6469
6487
|
if (Atomics.exchange(i32a, scheduled >>> 2, 1) !== 0) {
|
|
6470
6488
|
return;
|
|
6471
6489
|
}
|
|
@@ -6509,17 +6527,18 @@ var emnapiTSFN = {
|
|
|
6509
6527
|
});
|
|
6510
6528
|
},
|
|
6511
6529
|
send: function (func) {
|
|
6512
|
-
var
|
|
6530
|
+
var dispatchStateAddress = func + emnapiTSFN.offset.dispatch_state;
|
|
6531
|
+
var current_state = Atomics.or(new Uint32Array(emnapiTSFN.ensureBufferFor(dispatchStateAddress + 4)), dispatchStateAddress >>> 2, 1 << 1);
|
|
6513
6532
|
if ((current_state & 1) === 1) {
|
|
6514
6533
|
return;
|
|
6515
6534
|
}
|
|
6516
6535
|
var pendng = func + emnapiTSFN.offset.async_pending;
|
|
6517
6536
|
// A wakeup is already pending, so this send only needs to leave the queued
|
|
6518
6537
|
// work in the TSFN queue and let the existing drain pick it up.
|
|
6519
|
-
if (Atomics.load(new Int32Array(
|
|
6538
|
+
if (Atomics.load(new Int32Array(emnapiTSFN.ensureBufferFor(pendng + 4)), pendng >>> 2) !== 0) {
|
|
6520
6539
|
return;
|
|
6521
6540
|
}
|
|
6522
|
-
if (Atomics.exchange(new Int32Array(
|
|
6541
|
+
if (Atomics.exchange(new Int32Array(emnapiTSFN.ensureBufferFor(pendng + 4)), pendng >>> 2, 1) === 0) {
|
|
6523
6542
|
if ((typeof ENVIRONMENT_IS_PTHREAD !== 'undefined') && ENVIRONMENT_IS_PTHREAD) {
|
|
6524
6543
|
// Worker threads only post a wakeup token. Main-thread draining is
|
|
6525
6544
|
// serialized by enqueue() once the message is received.
|
|
@@ -6602,7 +6621,7 @@ function _napi_create_threadsafe_function(env, func, async_resource, async_resou
|
|
|
6602
6621
|
if (!tsfn)
|
|
6603
6622
|
return envObject.setLastError(9 /* napi_status.napi_generic_failure */);
|
|
6604
6623
|
{{{ from64('tsfn') }}};
|
|
6605
|
-
new Uint8Array(
|
|
6624
|
+
new Uint8Array(emnapiTSFN.ensureBufferFor(tsfn + sizeofTSFN)).subarray(tsfn, tsfn + sizeofTSFN).fill(0);
|
|
6606
6625
|
var resourceRef = emnapiCtx.createReference(envObject, resource, 1, 1 /* ReferenceOwnership.kUserland */);
|
|
6607
6626
|
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
6608
6627
|
var resource_ = resourceRef.id;
|
|
@@ -6715,8 +6734,9 @@ function _napi_unref_threadsafe_function(env, func) {
|
|
|
6715
6734
|
return 1 /* napi_status.napi_invalid_arg */;
|
|
6716
6735
|
}
|
|
6717
6736
|
{{{ from64('func') }}};
|
|
6718
|
-
var
|
|
6719
|
-
var
|
|
6737
|
+
var asyncRefAddress = func + emnapiTSFN.offset.async_ref;
|
|
6738
|
+
var asyncRefOffset = asyncRefAddress >>> 2;
|
|
6739
|
+
var arr = new Uint32Array(emnapiTSFN.ensureBufferFor(asyncRefAddress + 4));
|
|
6720
6740
|
var currentValue = Atomics.load(arr, asyncRefOffset);
|
|
6721
6741
|
if (currentValue > 0) {
|
|
6722
6742
|
Atomics.store(arr, asyncRefOffset, currentValue - 1);
|
|
@@ -6734,8 +6754,9 @@ function _napi_ref_threadsafe_function(env, func) {
|
|
|
6734
6754
|
return 1 /* napi_status.napi_invalid_arg */;
|
|
6735
6755
|
}
|
|
6736
6756
|
{{{ from64('func') }}};
|
|
6737
|
-
var
|
|
6738
|
-
var
|
|
6757
|
+
var asyncRefAddress = func + emnapiTSFN.offset.async_ref;
|
|
6758
|
+
var asyncRefOffset = asyncRefAddress >>> 2;
|
|
6759
|
+
var arr = new Uint32Array(emnapiTSFN.ensureBufferFor(asyncRefAddress + 4));
|
|
6739
6760
|
var currentValue = Atomics.load(arr, asyncRefOffset);
|
|
6740
6761
|
if (!currentValue) {
|
|
6741
6762
|
__emnapi_runtime_keepalive_push();
|
package/include/node/emnapi.h
CHANGED