summaryrefslogtreecommitdiff
path: root/core/shared_queue.js
diff options
context:
space:
mode:
authorandy finch <andyfinch7@gmail.com>2019-06-13 23:43:54 -0400
committerRyan Dahl <ry@tinyclouds.org>2019-06-13 20:43:54 -0700
commitdc60fe9f300043f191286ef804a365e16e455f87 (patch)
treec6b74e9faa6f26745b8770a18d0ae46ee34f3774 /core/shared_queue.js
parentfdd2eb538327ee3f50fe2869320411191830c985 (diff)
Refactor dispatch handling (#2452)
Promise id is now created in core and passed back to JS.
Diffstat (limited to 'core/shared_queue.js')
-rw-r--r--core/shared_queue.js17
1 files changed, 15 insertions, 2 deletions
diff --git a/core/shared_queue.js b/core/shared_queue.js
index 75f370ce4..b413f011e 100644
--- a/core/shared_queue.js
+++ b/core/shared_queue.js
@@ -151,14 +151,27 @@ SharedQueue Binary Layout
function handleAsyncMsgFromRust(buf) {
if (buf) {
- asyncHandler(buf);
+ handleAsyncMsgFromRustInner(buf);
} else {
while ((buf = shift()) != null) {
- asyncHandler(buf);
+ handleAsyncMsgFromRustInner(buf);
}
}
}
+ function handleAsyncMsgFromRustInner(buf) {
+ // DataView to extract cmdId value.
+ const dataView = new DataView(buf.buffer, buf.byteOffset, 4);
+ const promiseId = dataView.getInt32(0);
+ // Uint8 buffer view shifted right and shortened 4 bytes to remove cmdId from view window.
+ const bufViewFinal = new Uint8Array(
+ buf.buffer,
+ buf.byteOffset + 4,
+ buf.byteLength - 4
+ );
+ asyncHandler(promiseId, bufViewFinal);
+ }
+
function dispatch(control, zeroCopy = null) {
maybeInit();
// First try to push control to shared.