diff --git a/src/node_messaging.cc b/src/node_messaging.cc index 03c6d5aaa76ebd..5f054c41c8eb04 100644 --- a/src/node_messaging.cc +++ b/src/node_messaging.cc @@ -157,8 +157,7 @@ MaybeLocal Message::Deserialize(Environment* env, // Attach all transferred SharedArrayBuffers to their new Isolate. for (uint32_t i = 0; i < shared_array_buffers_.size(); ++i) { Local 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 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(); diff --git a/src/node_messaging.h b/src/node_messaging.h index bb30c78d865f01..ad06565977215c 100644 --- a/src/node_messaging.h +++ b/src/node_messaging.h @@ -94,6 +94,9 @@ class Message : public MemoryRetainer { const std::vector>& transferables() const { return transferables_; } + bool has_transferables() const { + return !transferables_.empty() || !array_buffers_.empty(); + } void MemoryInfo(MemoryTracker* tracker) const override; diff --git a/test/parallel/test-worker-broadcastchannel.js b/test/parallel/test-worker-broadcastchannel.js index 1f104a5edf4952..b26fbc3769d3f3 100644 --- a/test/parallel/test-worker-broadcastchannel.js +++ b/test/parallel/test-worker-broadcastchannel.js @@ -111,12 +111,19 @@ assert.throws(() => new BroadcastChannel(), { { const bc1 = new BroadcastChannel('channel3'); const bc2 = new BroadcastChannel('channel3'); - bc2.postMessage(new SharedArrayBuffer(10)); - bc1.addEventListener('message', common.mustCall(({ data }) => { - assert(data instanceof SharedArrayBuffer); - bc1.close(); - bc2.close(); - })); + const bc3 = new BroadcastChannel('channel3'); + bc3.postMessage(new SharedArrayBuffer(10)); + let received = 0; + for (const bc of [bc1, bc2]) { + bc.addEventListener('message', common.mustCall(({ data }) => { + assert(data instanceof SharedArrayBuffer); + if (++received === 2) { + bc1.close(); + bc2.close(); + bc3.close(); + } + })); + } } {