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 |