| Index: base/memory/shared_memory_handle.h
|
| diff --git a/base/memory/shared_memory_handle.h b/base/memory/shared_memory_handle.h
|
| index 469eba227d5e71ca93f129da491438cc5752b76b..7be0614fb27c5d79cb3bdb7458a402a8315f16c2 100644
|
| --- a/base/memory/shared_memory_handle.h
|
| +++ b/base/memory/shared_memory_handle.h
|
| @@ -71,6 +71,9 @@ class BASE_EXPORT SharedMemoryHandle {
|
| // memory region will have the same GUID. Preserved across IPC.
|
| base::UnguessableToken GetGUID() const;
|
|
|
| + // Returns the size of the memory region that SharedMemoryHandle points to.
|
| + size_t GetSize() const;
|
| +
|
| #if defined(OS_MACOSX) && !defined(OS_IOS)
|
| enum Type {
|
| // The SharedMemoryHandle is backed by a POSIX fd.
|
| @@ -91,15 +94,24 @@ class BASE_EXPORT SharedMemoryHandle {
|
| // SharedMemoryHandle, the caller must pass the |guid| of that
|
| // SharedMemoryHandle. Otherwise, the caller should generate a new
|
| // UnguessableToken.
|
| + // |size| refers to the size of the memory region pointed to by
|
| + // file_descriptor.fd. Passing the wrong |size| has no immediate consequence,
|
| + // but may cause errors when trying to map the SharedMemoryHandle at a later
|
| + // point in time.
|
| SharedMemoryHandle(const base::FileDescriptor& file_descriptor,
|
| + size_t size,
|
| const base::UnguessableToken& guid);
|
|
|
| // Makes a Mach-based SharedMemoryHandle of the given size. On error,
|
| // subsequent calls to IsValid() return false.
|
| + // Passing the wrong |size| has no immediate consequence, but may cause errors
|
| + // when trying to map the SharedMemoryHandle at a later point in time.
|
| SharedMemoryHandle(mach_vm_size_t size, const base::UnguessableToken& guid);
|
|
|
| // Makes a Mach-based SharedMemoryHandle from |memory_object|, a named entry
|
| // in the current task. The memory region has size |size|.
|
| + // Passing the wrong |size| has no immediate consequence, but may cause errors
|
| + // when trying to map the SharedMemoryHandle at a later point in time.
|
| SharedMemoryHandle(mach_port_t memory_object,
|
| mach_vm_size_t size,
|
| const base::UnguessableToken& guid);
|
| @@ -108,10 +120,6 @@ class BASE_EXPORT SharedMemoryHandle {
|
| // processes.
|
| mach_port_t GetMemoryObject() const;
|
|
|
| - // Returns false on a failure to determine the size. On success, populates the
|
| - // output variable |size|.
|
| - bool GetSize(size_t* size) const;
|
| -
|
| // The SharedMemoryHandle must be valid.
|
| // Returns whether the SharedMemoryHandle was successfully mapped into memory.
|
| // On success, |memory| is an output variable that contains the start of the
|
| @@ -124,7 +132,9 @@ class BASE_EXPORT SharedMemoryHandle {
|
| // SharedMemoryHandle, the caller must pass the |guid| of that
|
| // SharedMemoryHandle. Otherwise, the caller should generate a new
|
| // UnguessableToken.
|
| - SharedMemoryHandle(HANDLE h, const base::UnguessableToken& guid);
|
| + // Passing the wrong |size| has no immediate consequence, but may cause errors
|
| + // when trying to map the SharedMemoryHandle at a later point in time.
|
| + SharedMemoryHandle(HANDLE h, size_t size, const base::UnguessableToken& guid);
|
| HANDLE GetHandle() const;
|
| #else
|
| // |guid| uniquely identifies the shared memory region pointed to by the
|
| @@ -132,19 +142,21 @@ class BASE_EXPORT SharedMemoryHandle {
|
| // SharedMemoryHandle, the caller must pass the |guid| of that
|
| // SharedMemoryHandle. Otherwise, the caller should generate a new
|
| // UnguessableToken.
|
| + // Passing the wrong |size| has no immediate consequence, but may cause errors
|
| + // when trying to map the SharedMemoryHandle at a later point in time.
|
| SharedMemoryHandle(const base::FileDescriptor& file_descriptor,
|
| + size_t size,
|
| const base::UnguessableToken& guid);
|
|
|
| // Creates a SharedMemoryHandle from an |fd| supplied from an external
|
| // service.
|
| - static SharedMemoryHandle ImportHandle(int fd);
|
| + // Passing the wrong |size| has no immediate consequence, but may cause errors
|
| + // when trying to map the SharedMemoryHandle at a later point in time.
|
| + static SharedMemoryHandle ImportHandle(int fd, size_t size);
|
|
|
| // Returns the underlying OS resource.
|
| int GetHandle() const;
|
|
|
| - // Takes ownership of the OS resource.
|
| - void SetHandle(int fd);
|
| -
|
| // Invalidates [but doesn't close] the underlying OS resource. This will leak
|
| // unless the caller is careful.
|
| int Release();
|
| @@ -154,7 +166,7 @@ class BASE_EXPORT SharedMemoryHandle {
|
| #if defined(OS_MACOSX) && !defined(OS_IOS)
|
| friend class SharedMemory;
|
|
|
| - Type type_;
|
| + Type type_ = MACH;
|
|
|
| // Each instance of a SharedMemoryHandle is backed either by a POSIX fd or a
|
| // mach port. |type_| determines the backing member.
|
| @@ -162,33 +174,32 @@ class BASE_EXPORT SharedMemoryHandle {
|
| FileDescriptor file_descriptor_;
|
|
|
| struct {
|
| - mach_port_t memory_object_;
|
| -
|
| - // The size of the shared memory region when |type_| is MACH. Only
|
| - // relevant if |memory_object_| is not |MACH_PORT_NULL|.
|
| - mach_vm_size_t size_;
|
| + mach_port_t memory_object_ = MACH_PORT_NULL;
|
|
|
| // Whether passing this object as a parameter to an IPC message passes
|
| // ownership of |memory_object_| to the IPC stack. This is meant to mimic
|
| // the behavior of the |auto_close| parameter of FileDescriptor.
|
| // Defaults to |false|.
|
| - bool ownership_passes_to_ipc_;
|
| + bool ownership_passes_to_ipc_ = false;
|
| };
|
| };
|
| #elif defined(OS_WIN)
|
| - HANDLE handle_;
|
| + HANDLE handle_ = nullptr;
|
|
|
| // Whether passing this object as a parameter to an IPC message passes
|
| // ownership of |handle_| to the IPC stack. This is meant to mimic the
|
| // behavior of the |auto_close| parameter of FileDescriptor. This member only
|
| // affects attachment-brokered SharedMemoryHandles.
|
| // Defaults to |false|.
|
| - bool ownership_passes_to_ipc_;
|
| + bool ownership_passes_to_ipc_ = false;
|
| #else
|
| FileDescriptor file_descriptor_;
|
| #endif
|
|
|
| base::UnguessableToken guid_;
|
| +
|
| + // The size of the region referenced by the SharedMemoryHandle.
|
| + size_t size_ = 0;
|
| };
|
|
|
| } // namespace base
|
|
|