Index: base/memory/shared_memory_posix.cc |
diff --git a/base/memory/shared_memory_posix.cc b/base/memory/shared_memory_posix.cc |
index ec4f01f35a3fdfa4132db9577fcc632ab306a406..904c95d6dddb801bf66aa67dc0bf724953e79987 100644 |
--- a/base/memory/shared_memory_posix.cc |
+++ b/base/memory/shared_memory_posix.cc |
@@ -176,6 +176,24 @@ size_t SharedMemory::GetHandleLimit() { |
return base::GetMaxFds(); |
} |
+// static |
+SharedMemoryHandle SharedMemory::ShallowCopyHandle( |
+ const SharedMemoryHandle& handle) { |
+ SharedMemoryHandle new_handle = handle; |
+ new_handle.auto_close = false; |
+ return new_handle; |
+} |
+ |
+// static |
+SharedMemoryHandle SharedMemory::DeepCopyHandle( |
+ const SharedMemoryHandle& handle, |
+ bool clean_up_resources_on_destruction) { |
+ int duped_handle = HANDLE_EINTR(dup(handle.fd)); |
+ if (duped_handle < 0) |
+ return base::SharedMemory::NULLHandle(); |
+ return base::FileDescriptor(duped_handle, clean_up_resources_on_destruction); |
+} |
+ |
bool SharedMemory::CreateAndMapAnonymous(size_t size) { |
return CreateAnonymous(size) && Map(size); |
} |