Chromium Code Reviews| 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_ |