summaryrefslogtreecommitdiff
path: root/core/shared_queue.js
diff options
context:
space:
mode:
Diffstat (limited to 'core/shared_queue.js')
-rw-r--r--core/shared_queue.js39
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);