Index: base/file_descriptor_store.h |
diff --git a/base/file_descriptor_store.h b/base/file_descriptor_store.h |
new file mode 100644 |
index 0000000000000000000000000000000000000000..f0b2f3e1be9e8b52de764a10e43b7641277ca08a |
--- /dev/null |
+++ b/base/file_descriptor_store.h |
@@ -0,0 +1,70 @@ |
+// Copyright 2017 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+#ifndef BASE_FILE_DESCRIPTOR_STORE_H_ |
+#define BASE_FILE_DESCRIPTOR_STORE_H_ |
+ |
+#include <stdint.h> |
+ |
+#include <vector> |
+ |
Ken Rockot(use gerrit already)
2017/02/09 17:17:27
include <string>
Jay Civelli
2017/02/09 22:08:26
Done.
|
+#include "base/files/memory_mapped_file.h" |
+#include "base/memory/singleton.h" |
+ |
+namespace base { |
+ |
+// The file descriptor store is used to associate file descriptors with keys |
+// that must be unique. |
+// It is used to share file descriptors from a process to its child. |
+class BASE_EXPORT FileDescriptorStore { |
+ public: |
+ struct Descriptor { |
+ Descriptor(const std::string& key, int fd); |
+ Descriptor(const std::string& key, |
+ int fd, |
+ base::MemoryMappedFile::Region region); |
+ |
+ // Globally unique key. |
+ std::string key; |
+ // Actual FD. |
+ int fd; |
Ken Rockot(use gerrit already)
2017/02/09 17:17:27
nit: Use ScopedFD? You will have to define a move
Jay Civelli
2017/02/09 22:08:27
Great idea, now using a ScopedFD.
|
+ // Optional region, defaults to kWholeFile. |
+ base::MemoryMappedFile::Region region; |
+ }; |
+ typedef std::vector<Descriptor> Mapping; |
Ken Rockot(use gerrit already)
2017/02/09 17:17:27
Why not a map<std::string, Descriptor> and remove
Jay Civelli
2017/02/09 22:08:27
Done.
I copied this file over from GlobalDescripto
|
+ |
+ // Returns the singleton instance of FileDescriptorStore. |
+ static FileDescriptorStore* GetInstance(); |
+ |
+ // Gets a descriptor given a key. It is a fatal error if the key is not known. |
+ int Get(const std::string& key) const; |
Ken Rockot(use gerrit already)
2017/02/09 17:17:27
Get = TakeFD, and make it return a ScopedFD?
Jay Civelli
2017/02/09 22:08:27
Done.
|
+ |
+ // Gets a descriptor given a key. Returns -1 on error. |
+ int MaybeGet(const std::string& key) const; |
Ken Rockot(use gerrit already)
2017/02/09 17:17:27
MaybeTakeFD?
Jay Civelli
2017/02/09 22:08:27
Done.
|
+ |
+ // Gets a region given a key. It is a fatal error if the key is not known. |
+ base::MemoryMappedFile::Region GetRegion(const std::string& key) const; |
+ |
+ // Sets the descriptor for the given |key|. This sets the region associated |
+ // with |key| to kWholeFile. |
+ void Set(const std::string& key, int fd); |
Ken Rockot(use gerrit already)
2017/02/09 17:17:28
ScopedFD
Jay Civelli
2017/02/09 22:08:26
Done.
|
+ |
+ // Sets the descriptor and |region| for the given |key|. |
+ void Set(const std::string& key, |
Ken Rockot(use gerrit already)
2017/02/09 17:17:28
ScopedFD
Jay Civelli
2017/02/09 22:08:26
Done.
|
+ int fd, |
+ base::MemoryMappedFile::Region region); |
+ |
+ void Reset(const Mapping& mapping); |
Ken Rockot(use gerrit already)
2017/02/09 17:17:27
If making the above changes, this should just beco
Jay Civelli
2017/02/09 22:08:26
This is actually not used, a left over from me tak
|
+ |
+ private: |
+ friend struct DefaultSingletonTraits<FileDescriptorStore>; |
+ FileDescriptorStore(); |
+ ~FileDescriptorStore(); |
+ |
+ Mapping descriptors_; |
+}; |
Ken Rockot(use gerrit already)
2017/02/09 17:17:27
DISALLOW_COPY_AND_ASSIGN
Jay Civelli
2017/02/09 22:08:26
Done.
|
+ |
+} // namespace base |
+ |
+#endif // BASE_FILE_DESCRIPTOR_STORE_H_ |