diff options
author | teravest@chromium.org <teravest@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-01-10 20:00:47 +0000 |
---|---|---|
committer | teravest@chromium.org <teravest@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-01-10 20:00:47 +0000 |
commit | 52d1b4e358427885ef7b5f0f4507016f65fe9309 (patch) | |
tree | 1531cfea450b8c60b3a2ebf53cf0698ee3501f0a | |
parent | f884f3082df890779c4783e107c85959bf2b0dd4 (diff) | |
download | chromium_src-52d1b4e358427885ef7b5f0f4507016f65fe9309.zip chromium_src-52d1b4e358427885ef7b5f0f4507016f65fe9309.tar.gz chromium_src-52d1b4e358427885ef7b5f0f4507016f65fe9309.tar.bz2 |
Enable shared memory handle sharing in NaCl.
The destructor for base::SharedMemory closes its handle on destruction.
To keep a shared memory region alive after using it, we need to
duplicate the handle. This uses dup(), which is available in native
client.
BUG=
Review URL: https://chromiumcodereview.appspot.com/11817020
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@176133 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r-- | base/shared_memory_nacl.cc | 13 |
1 files changed, 12 insertions, 1 deletions
diff --git a/base/shared_memory_nacl.cc b/base/shared_memory_nacl.cc index a86578b..433ba28 100644 --- a/base/shared_memory_nacl.cc +++ b/base/shared_memory_nacl.cc @@ -142,7 +142,18 @@ void SharedMemory::Unlock() { bool SharedMemory::ShareToProcessCommon(ProcessHandle process, SharedMemoryHandle *new_handle, bool close_self) { - return false; + const int new_fd = dup(mapped_file_); + if (new_fd < 0) { + DPLOG(ERROR) << "dup() failed."; + return false; + } + + new_handle->fd = new_fd; + new_handle->auto_close = true; + + if (close_self) + Close(); + return true; } } // namespace base |