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..02b5b07b4c103e78cae571db7c3e0ee2774cb0be 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) { |
+ return ScopedPlatformHandle(PlatformHandle( |
+ memory_handle.GetMemoryObject())); |
+ } else { |
+ // We should never pass POSIX shared memory over IPC. |
+ CHECK(false); |
+ return ScopedPlatformHandle(); |
+ } |
#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 |