diff options
author | Ryan Dahl <ry@tinyclouds.org> | 2019-04-24 21:43:06 -0400 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-04-24 21:43:06 -0400 |
commit | 7fc9d7d62a864d1e6af0e77291a105726f73279c (patch) | |
tree | 1fe4b31f9a2362540e125c94a990ea713f0b5e0f /core/shared_queue.js | |
parent | f6948235079b1d6050a2d3c98891844cb97595f5 (diff) |
core: Add test for snapshotting from Rust (#2197)
Diffstat (limited to 'core/shared_queue.js')
-rw-r--r-- | core/shared_queue.js | 39 |
1 files changed, 26 insertions, 13 deletions
diff --git a/core/shared_queue.js b/core/shared_queue.js index aa3ff0aee..3a447cedb 100644 --- a/core/shared_queue.js +++ b/core/shared_queue.js @@ -16,6 +16,8 @@ SharedQueue Binary Layout +---------------------------------------------------------------+ */ +/* eslint-disable @typescript-eslint/no-use-before-define */ + (window => { const GLOBAL_NAMESPACE = "Deno"; const CORE_NAMESPACE = "core"; @@ -32,6 +34,25 @@ SharedQueue Binary Layout let sharedBytes; let shared32; + let initialized = false; + + function maybeInit() { + if (!initialized) { + init(); + initialized = true; + } + } + + function init() { + let shared = Deno.core.shared; + assert(shared.byteLength > 0); + assert(sharedBytes == null); + assert(shared32 == null); + sharedBytes = new Uint8Array(shared); + shared32 = new Int32Array(shared); + // Callers should not call Deno.core.recv, use setAsyncHandler. + Deno.core.recv(handleAsyncMsgFromRust); + } function assert(cond) { if (!cond) { @@ -40,12 +61,14 @@ SharedQueue Binary Layout } function reset() { + maybeInit(); shared32[INDEX_NUM_RECORDS] = 0; shared32[INDEX_NUM_SHIFTED_OFF] = 0; shared32[INDEX_HEAD] = HEAD_INIT; } function head() { + maybeInit(); return shared32[INDEX_HEAD]; } @@ -121,6 +144,7 @@ SharedQueue Binary Layout let asyncHandler; function setAsyncHandler(cb) { + maybeInit(); assert(asyncHandler == null); asyncHandler = cb; } @@ -135,17 +159,8 @@ SharedQueue Binary Layout } } - function init(shared) { - assert(shared.byteLength > 0); - assert(sharedBytes == null); - assert(shared32 == null); - sharedBytes = new Uint8Array(shared); - shared32 = new Int32Array(shared); - // Callers should not call Deno.core.recv, use setAsyncHandler. - window.Deno.core.recv(handleAsyncMsgFromRust); - } - function dispatch(control, zeroCopy = null) { + maybeInit(); // First try to push control to shared. const success = push(control); // If successful, don't use first argument of core.send. @@ -170,6 +185,4 @@ SharedQueue Binary Layout assert(window[GLOBAL_NAMESPACE] != null); assert(window[GLOBAL_NAMESPACE][CORE_NAMESPACE] != null); Object.assign(core, denoCore); - - init(Deno.core.shared); -})(globalThis); +})(this); |