summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorteravest@chromium.org <teravest@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-01-10 20:00:47 +0000
committerteravest@chromium.org <teravest@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-01-10 20:00:47 +0000
commit52d1b4e358427885ef7b5f0f4507016f65fe9309 (patch)
tree1531cfea450b8c60b3a2ebf53cf0698ee3501f0a
parentf884f3082df890779c4783e107c85959bf2b0dd4 (diff)
downloadchromium_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.cc13
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