Chromium Code Reviews| Index: mojo/edk/embedder/platform_shared_buffer.cc |
| diff --git a/mojo/edk/embedder/platform_shared_buffer.cc b/mojo/edk/embedder/platform_shared_buffer.cc |
| index 58af44df8f8c2763ce50a135c01b744e62fdd844..22e8ab645799021d5eff439f89683a275c384e42 100644 |
| --- a/mojo/edk/embedder/platform_shared_buffer.cc |
| +++ b/mojo/edk/embedder/platform_shared_buffer.cc |
| @@ -33,7 +33,14 @@ ScopedPlatformHandle SharedMemoryToPlatformHandle( |
| #elif defined(OS_WIN) |
| return ScopedPlatformHandle(PlatformHandle(memory_handle.GetHandle())); |
| #else |
| - return ScopedPlatformHandle(PlatformHandle(memory_handle.GetMemoryObject())); |
| + if (memory_handle.GetType() == base::SharedMemoryHandle::MACH) { |
|
erikchen
2016/12/06 17:32:32
we never pass posix SHM on Mac over Chrome/Mojo IP
|
| + return ScopedPlatformHandle(PlatformHandle( |
| + memory_handle.GetMemoryObject())); |
| + } else { |
| + DCHECK(memory_handle.GetType() == base::SharedMemoryHandle::POSIX); |
| + return ScopedPlatformHandle(PlatformHandle( |
| + memory_handle.GetFileDescriptor().fd)); |
| + } |
| #endif |
| } |
| @@ -226,6 +233,9 @@ bool PlatformSharedBuffer::Init() { |
| options.size = num_bytes_; |
| // By default, we can share as read-only. |
| options.share_read_only = true; |
| +#if defined(OS_MACOSX) && !defined(OS_IOS) |
| + options.type = base::SharedMemoryHandle::MACH; |
| +#endif |
| shared_memory_.reset(new base::SharedMemory); |
| return shared_memory_->Create(options); |
| @@ -240,8 +250,12 @@ bool PlatformSharedBuffer::InitFromPlatformHandle( |
| base::GetCurrentProcId()); |
| #elif defined(OS_MACOSX) && !defined(OS_IOS) |
| base::SharedMemoryHandle handle; |
| - handle = base::SharedMemoryHandle(platform_handle.release().port, num_bytes_, |
| - base::GetCurrentProcId()); |
| + if (platform_handle.get().type == PlatformHandle::Type::MACH) { |
| + handle = base::SharedMemoryHandle( |
| + platform_handle.release().port, num_bytes_, base::GetCurrentProcId()); |
| + } else { |
| + handle = base::SharedMemoryHandle(platform_handle.release().handle, false); |
| + } |
| #else |
| base::SharedMemoryHandle handle(platform_handle.release().handle, false); |
| #endif |