OLD | NEW |
1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #ifndef BASE_MEMORY_SHARED_MEMORY_HANDLE_H_ | 5 #ifndef BASE_MEMORY_SHARED_MEMORY_HANDLE_H_ |
6 #define BASE_MEMORY_SHARED_MEMORY_HANDLE_H_ | 6 #define BASE_MEMORY_SHARED_MEMORY_HANDLE_H_ |
7 | 7 |
8 #include <stddef.h> | 8 #include <stddef.h> |
9 | 9 |
10 #include "build/build_config.h" | 10 #include "build/build_config.h" |
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
49 void Close() const; | 49 void Close() const; |
50 | 50 |
51 // Whether ownership of the underlying OS resource is implicitly passed to | 51 // Whether ownership of the underlying OS resource is implicitly passed to |
52 // the IPC subsystem during serialization. | 52 // the IPC subsystem during serialization. |
53 void SetOwnershipPassesToIPC(bool ownership_passes); | 53 void SetOwnershipPassesToIPC(bool ownership_passes); |
54 bool OwnershipPassesToIPC() const; | 54 bool OwnershipPassesToIPC() const; |
55 | 55 |
56 // Whether the underlying OS resource is valid. | 56 // Whether the underlying OS resource is valid. |
57 bool IsValid() const; | 57 bool IsValid() const; |
58 | 58 |
| 59 // Duplicates the underlying OS resource. |
| 60 SharedMemoryHandle Duplicate() const; |
| 61 |
59 #if defined(OS_MACOSX) && !defined(OS_IOS) | 62 #if defined(OS_MACOSX) && !defined(OS_IOS) |
60 enum Type { | 63 enum Type { |
61 // The SharedMemoryHandle is backed by a POSIX fd. | 64 // The SharedMemoryHandle is backed by a POSIX fd. |
62 POSIX, | 65 POSIX, |
63 // The SharedMemoryHandle is backed by the Mach primitive "memory object". | 66 // The SharedMemoryHandle is backed by the Mach primitive "memory object". |
64 MACH, | 67 MACH, |
65 }; | 68 }; |
66 | 69 |
67 // Constructs a SharedMemoryHandle backed by the components of a | 70 // Constructs a SharedMemoryHandle backed by the components of a |
68 // FileDescriptor. The newly created instance has the same ownership semantics | 71 // FileDescriptor. The newly created instance has the same ownership semantics |
69 // as base::FileDescriptor. This typically means that the SharedMemoryHandle | 72 // as base::FileDescriptor. This typically means that the SharedMemoryHandle |
70 // takes ownership of the |fd| if |auto_close| is true. Unfortunately, it's | 73 // takes ownership of the |fd| if |auto_close| is true. Unfortunately, it's |
71 // common for existing code to make shallow copies of SharedMemoryHandle, and | 74 // common for existing code to make shallow copies of SharedMemoryHandle, and |
72 // the one that is finally passed into a base::SharedMemory is the one that | 75 // the one that is finally passed into a base::SharedMemory is the one that |
73 // "consumes" the fd. | 76 // "consumes" the fd. |
74 explicit SharedMemoryHandle(const base::FileDescriptor& file_descriptor); | 77 explicit SharedMemoryHandle(const base::FileDescriptor& file_descriptor); |
75 | 78 |
76 // Makes a Mach-based SharedMemoryHandle of the given size. On error, | 79 // Makes a Mach-based SharedMemoryHandle of the given size. On error, |
77 // subsequent calls to IsValid() return false. | 80 // subsequent calls to IsValid() return false. |
78 explicit SharedMemoryHandle(mach_vm_size_t size); | 81 explicit SharedMemoryHandle(mach_vm_size_t size); |
79 | 82 |
80 // Makes a Mach-based SharedMemoryHandle from |memory_object|, a named entry | 83 // Makes a Mach-based SharedMemoryHandle from |memory_object|, a named entry |
81 // in the task with process id |pid|. The memory region has size |size|. | 84 // in the task with process id |pid|. The memory region has size |size|. |
82 SharedMemoryHandle(mach_port_t memory_object, | 85 SharedMemoryHandle(mach_port_t memory_object, |
83 mach_vm_size_t size, | 86 mach_vm_size_t size, |
84 base::ProcessId pid); | 87 base::ProcessId pid); |
85 | 88 |
86 // Duplicates the underlying OS resources. | |
87 SharedMemoryHandle Duplicate() const; | |
88 | |
89 // Exposed so that the SharedMemoryHandle can be transported between | 89 // Exposed so that the SharedMemoryHandle can be transported between |
90 // processes. | 90 // processes. |
91 mach_port_t GetMemoryObject() const; | 91 mach_port_t GetMemoryObject() const; |
92 | 92 |
93 // Returns false on a failure to determine the size. On success, populates the | 93 // Returns false on a failure to determine the size. On success, populates the |
94 // output variable |size|. | 94 // output variable |size|. |
95 bool GetSize(size_t* size) const; | 95 bool GetSize(size_t* size) const; |
96 | 96 |
97 // The SharedMemoryHandle must be valid. | 97 // The SharedMemoryHandle must be valid. |
98 // Returns whether the SharedMemoryHandle was successfully mapped into memory. | 98 // Returns whether the SharedMemoryHandle was successfully mapped into memory. |
(...skipping 25 matching lines...) Expand all Loading... |
124 | 124 |
125 // Returns the underlying OS resource. | 125 // Returns the underlying OS resource. |
126 int GetHandle() const; | 126 int GetHandle() const; |
127 | 127 |
128 // Takes ownership of the OS resource. | 128 // Takes ownership of the OS resource. |
129 void SetHandle(int fd); | 129 void SetHandle(int fd); |
130 | 130 |
131 // Invalidates [but doesn't close] the underlying OS resource. This will leak | 131 // Invalidates [but doesn't close] the underlying OS resource. This will leak |
132 // unless the caller is careful. | 132 // unless the caller is careful. |
133 int Release(); | 133 int Release(); |
134 | |
135 // Duplicates the underlying OS resource. | |
136 SharedMemoryHandle Duplicate() const; | |
137 #endif | 134 #endif |
138 | 135 |
139 private: | 136 private: |
140 #if defined(OS_MACOSX) && !defined(OS_IOS) | 137 #if defined(OS_MACOSX) && !defined(OS_IOS) |
141 friend class SharedMemory; | 138 friend class SharedMemory; |
142 | 139 |
143 // Shared code between copy constructor and operator=. | 140 // Shared code between copy constructor and operator=. |
144 void CopyRelevantData(const SharedMemoryHandle& handle); | 141 void CopyRelevantData(const SharedMemoryHandle& handle); |
145 | 142 |
146 Type type_; | 143 Type type_; |
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
182 // Defaults to |false|. | 179 // Defaults to |false|. |
183 bool ownership_passes_to_ipc_; | 180 bool ownership_passes_to_ipc_; |
184 #else | 181 #else |
185 FileDescriptor file_descriptor_; | 182 FileDescriptor file_descriptor_; |
186 #endif | 183 #endif |
187 }; | 184 }; |
188 | 185 |
189 } // namespace base | 186 } // namespace base |
190 | 187 |
191 #endif // BASE_MEMORY_SHARED_MEMORY_HANDLE_H_ | 188 #endif // BASE_MEMORY_SHARED_MEMORY_HANDLE_H_ |
OLD | NEW |