| Index: base/shared_memory_posix.cc
 | 
| diff --git a/base/shared_memory_posix.cc b/base/shared_memory_posix.cc
 | 
| index bd33cda006d6ec08557cf2ebb8d32208e6ef86e8..e6f81c52961ce4a199fd323cf12b47fe61cd8018 100644
 | 
| --- a/base/shared_memory_posix.cc
 | 
| +++ b/base/shared_memory_posix.cc
 | 
| @@ -29,7 +29,7 @@ SharedMemory::SharedMemory()
 | 
|  }
 | 
|  
 | 
|  SharedMemory::SharedMemory(SharedMemoryHandle handle, bool read_only)
 | 
| -    : mapped_file_(handle),
 | 
| +    : mapped_file_(handle.fd),
 | 
|        memory_(NULL),
 | 
|        read_only_(read_only),
 | 
|        max_size_(0) {
 | 
| @@ -37,7 +37,7 @@ SharedMemory::SharedMemory(SharedMemoryHandle handle, bool read_only)
 | 
|  
 | 
|  SharedMemory::SharedMemory(SharedMemoryHandle handle, bool read_only,
 | 
|                             ProcessHandle process)
 | 
| -    : mapped_file_(handle),
 | 
| +    : mapped_file_(handle.fd),
 | 
|        memory_(NULL),
 | 
|        read_only_(read_only),
 | 
|        max_size_(0) {
 | 
| @@ -50,6 +50,11 @@ SharedMemory::~SharedMemory() {
 | 
|    Close();
 | 
|  }
 | 
|  
 | 
| +// static
 | 
| +bool SharedMemory::IsHandleValid(const SharedMemoryHandle& handle) {
 | 
| +  return handle.fd >= 0;
 | 
| +}
 | 
| +
 | 
|  bool SharedMemory::Create(const std::wstring &name, bool read_only,
 | 
|                            bool open_existing, size_t size) {
 | 
|    read_only_ = read_only;
 | 
| @@ -232,10 +237,15 @@ bool SharedMemory::Unmap() {
 | 
|  bool SharedMemory::ShareToProcessCommon(ProcessHandle process,
 | 
|                                          SharedMemoryHandle *new_handle,
 | 
|                                          bool close_self) {
 | 
| -  *new_handle = 0;
 | 
| -  // TODO(awalker): figure out if we need this, and do the appropriate
 | 
| -  // VM magic if so.
 | 
| -  return false;
 | 
| +  const int new_fd = dup(mapped_file_);
 | 
| +  DCHECK(new_fd >= -1);
 | 
| +  new_handle->fd = new_fd;
 | 
| +  new_handle->auto_close = true;
 | 
| +
 | 
| +  if (close_self)
 | 
| +    Close();
 | 
| +
 | 
| +  return true;
 | 
|  }
 | 
|  
 | 
|  
 | 
| @@ -277,4 +287,8 @@ void SharedMemory::Unlock() {
 | 
|    LockOrUnlockCommon(F_ULOCK);
 | 
|  }
 | 
|  
 | 
| +SharedMemoryHandle SharedMemory::handle() const {
 | 
| +  return FileDescriptor(mapped_file_, false);
 | 
| +}
 | 
| +
 | 
|  }  // namespace base
 | 
| 
 |