diff options
Diffstat (limited to 'core/shared_queue.js')
-rw-r--r-- | core/shared_queue.js | 17 |
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. |