diff options
author | Anna Henningsen <anna@addaleax.net> | 2020-12-13 23:43:40 +0300 |
---|---|---|
committer | Anna Henningsen <anna@addaleax.net> | 2020-12-14 18:50:23 +0300 |
commit | 67643e1c2ecc380a0d92550eb7ce2d283c8c6184 (patch) | |
tree | 82e0671534ff11c25dfc314962b0610183cc5d34 /src | |
parent | 68b6c1a30d3a153bf9ba55f1fad477d78f4cf682 (diff) |
worker: fix broadcast channel SharedArrayBuffer passing
Make sure that `SharedArrayBuffer`s can be deserialized on multiple
receiving ends. As a drive-by, also fix the condition of the
internal assertion that should occur if there are transferables
passed to multiple destinations.
PR-URL: https://github.com/nodejs/node/pull/36501
Reviewed-By: Michaƫl Zasso <targos@protonmail.com>
Reviewed-By: Gus Caplan <me@gus.host>
Reviewed-By: James M Snell <jasnell@gmail.com>
Diffstat (limited to 'src')
-rw-r--r-- | src/node_messaging.cc | 5 | ||||
-rw-r--r-- | src/node_messaging.h | 3 |
2 files changed, 5 insertions, 3 deletions
diff --git a/src/node_messaging.cc b/src/node_messaging.cc index 03c6d5aaa76..5f054c41c8e 100644 --- a/src/node_messaging.cc +++ b/src/node_messaging.cc @@ -157,8 +157,7 @@ MaybeLocal<Value> Message::Deserialize(Environment* env, // Attach all transferred SharedArrayBuffers to their new Isolate. for (uint32_t i = 0; i < shared_array_buffers_.size(); ++i) { Local<SharedArrayBuffer> sab = - SharedArrayBuffer::New(env->isolate(), - std::move(shared_array_buffers_[i])); + SharedArrayBuffer::New(env->isolate(), shared_array_buffers_[i]); shared_array_buffers.push_back(sab); } @@ -1309,7 +1308,7 @@ Maybe<bool> SiblingGroup::Dispatch( // Transferables cannot be used when there is more // than a single destination. - if (size() > 2 && message->transferables().size()) { + if (size() > 2 && message->has_transferables()) { if (error != nullptr) *error = "Transferables cannot be used with multiple destinations."; return Nothing<bool>(); diff --git a/src/node_messaging.h b/src/node_messaging.h index bb30c78d865..ad065659772 100644 --- a/src/node_messaging.h +++ b/src/node_messaging.h @@ -94,6 +94,9 @@ class Message : public MemoryRetainer { const std::vector<std::unique_ptr<TransferData>>& transferables() const { return transferables_; } + bool has_transferables() const { + return !transferables_.empty() || !array_buffers_.empty(); + } void MemoryInfo(MemoryTracker* tracker) const override; |