summaryrefslogtreecommitdiff
path: root/src/node_messaging.h
diff options
context:
space:
mode:
authorAnna Henningsen <anna@addaleax.net>2018-05-13 19:39:32 +0200
committerAnna Henningsen <anna@addaleax.net>2018-06-06 19:43:46 +0200
commitb0404047c1e4f7652aaf6ecf911d5850d5acf570 (patch)
treef8e09cfda61b24d4c548e6d9ab560bfaa5d3a03a /src/node_messaging.h
parent749a13b76c351d515ed489844ece575b8918d2ed (diff)
downloadandroid-node-v8-b0404047c1e4f7652aaf6ecf911d5850d5acf570.tar.gz
android-node-v8-b0404047c1e4f7652aaf6ecf911d5850d5acf570.tar.bz2
android-node-v8-b0404047c1e4f7652aaf6ecf911d5850d5acf570.zip
worker: add `SharedArrayBuffer` sharing
Logic is added to the `MessagePort` mechanism that attaches hidden objects to those instances when they are transferred that track their lifetime and maintain a reference count, to make sure that memory is freed at the appropriate times. Thanks to Stephen Belanger for reviewing this change in its original PR. Refs: https://github.com/ayojs/ayo/pull/106 PR-URL: https://github.com/nodejs/node/pull/20876 Reviewed-By: Gireesh Punathil <gpunathi@in.ibm.com> Reviewed-By: Benjamin Gruenbaum <benjamingr@gmail.com> Reviewed-By: Shingo Inoue <leko.noor@gmail.com> Reviewed-By: Matteo Collina <matteo.collina@gmail.com> Reviewed-By: Tiancheng "Timothy" Gu <timothygu99@gmail.com> Reviewed-By: John-David Dalton <john.david.dalton@gmail.com> Reviewed-By: Gus Caplan <me@gus.host>
Diffstat (limited to 'src/node_messaging.h')
-rw-r--r--src/node_messaging.h6
1 files changed, 5 insertions, 1 deletions
diff --git a/src/node_messaging.h b/src/node_messaging.h
index 074267bb67..ff8fcc7243 100644
--- a/src/node_messaging.h
+++ b/src/node_messaging.h
@@ -5,8 +5,8 @@
#include "env.h"
#include "node_mutex.h"
+#include "sharedarraybuffer_metadata.h"
#include <list>
-#include <memory>
namespace node {
namespace worker {
@@ -37,6 +37,9 @@ class Message {
v8::Local<v8::Value> input,
v8::Local<v8::Value> transfer_list);
+ // Internal method of Message that is called when a new SharedArrayBuffer
+ // object is encountered in the incoming value's structure.
+ void AddSharedArrayBuffer(SharedArrayBufferMetadataReference ref);
// Internal method of Message that is called once serialization finishes
// and that transfers ownership of `data` to this message.
void AddMessagePort(std::unique_ptr<MessagePortData>&& data);
@@ -44,6 +47,7 @@ class Message {
private:
MallocedBuffer<char> main_message_buf_;
std::vector<MallocedBuffer<char>> array_buffer_contents_;
+ std::vector<SharedArrayBufferMetadataReference> shared_array_buffers_;
std::vector<std::unique_ptr<MessagePortData>> message_ports_;
friend class MessagePort;