Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/nodejs/node.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAnna Henningsen <anna@addaleax.net>2020-06-06 17:27:30 +0300
committerAnna Henningsen <anna@addaleax.net>2020-06-14 15:53:40 +0300
commit8641d94189398063b20d5e38549bfd8f023af2d6 (patch)
treeecb18fb2e97803c51b6b5105361a3e4fb0a5904d /src/node_file.h
parent9129cf21ab51432675521ea158191ae3f866cafb (diff)
worker,fs: make FileHandle transferable
Allow passing `FileHandle` instances in the transfer list of a `.postMessage()` call. PR-URL: https://github.com/nodejs/node/pull/33772 Reviewed-By: Benjamin Gruenbaum <benjamingr@gmail.com>
Diffstat (limited to 'src/node_file.h')
-rw-r--r--src/node_file.h22
1 files changed, 22 insertions, 0 deletions
diff --git a/src/node_file.h b/src/node_file.h
index ad493bd944c..fd17fc99d52 100644
--- a/src/node_file.h
+++ b/src/node_file.h
@@ -5,6 +5,7 @@
#include "node.h"
#include "aliased_buffer.h"
+#include "node_messaging.h"
#include "stream_base.h"
#include <iostream>
@@ -273,7 +274,28 @@ class FileHandle final : public AsyncWrap, public StreamBase {
FileHandle(const FileHandle&&) = delete;
FileHandle& operator=(const FileHandle&&) = delete;
+ TransferMode GetTransferMode() const override;
+ std::unique_ptr<worker::TransferData> TransferForMessaging() override;
+
private:
+ class TransferData : public worker::TransferData {
+ public:
+ explicit TransferData(int fd);
+ ~TransferData();
+
+ BaseObjectPtr<BaseObject> Deserialize(
+ Environment* env,
+ v8::Local<v8::Context> context,
+ std::unique_ptr<worker::TransferData> self) override;
+
+ SET_NO_MEMORY_INFO()
+ SET_MEMORY_INFO_NAME(FileHandleTransferData)
+ SET_SELF_SIZE(TransferData)
+
+ private:
+ int fd_;
+ };
+
FileHandle(BindingData* binding_data, v8::Local<v8::Object> obj, int fd);
// Synchronous close that emits a warning