diff options
author | Anna Henningsen <anna@addaleax.net> | 2020-06-06 17:27:30 +0300 |
---|---|---|
committer | Anna Henningsen <anna@addaleax.net> | 2020-06-14 15:53:40 +0300 |
commit | 8641d94189398063b20d5e38549bfd8f023af2d6 (patch) | |
tree | ecb18fb2e97803c51b6b5105361a3e4fb0a5904d /src/node_file.h | |
parent | 9129cf21ab51432675521ea158191ae3f866cafb (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.h | 22 |
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 |