Index: base/memory/shared_memory_android.cc |
diff --git a/base/memory/shared_memory_android.cc b/base/memory/shared_memory_android.cc |
index 6f1d9cb874c664891a1cfaa71920b803ef4c8eaa..49289f704b392d2e15ef594bdd11e83f140ead9f 100644 |
--- a/base/memory/shared_memory_android.cc |
+++ b/base/memory/shared_memory_android.cc |
@@ -18,21 +18,22 @@ namespace base { |
// are closed, the memory buffer will go away. |
bool SharedMemory::Create(const SharedMemoryCreateOptions& options) { |
- DCHECK_EQ(-1, mapped_file_ ); |
+ DCHECK(!shm_.IsValid()); |
if (options.size > static_cast<size_t>(std::numeric_limits<int>::max())) |
return false; |
// "name" is just a label in ashmem. It is visible in /proc/pid/maps. |
- mapped_file_ = ashmem_create_region( |
+ int fd = ashmem_create_region( |
options.name_deprecated == NULL ? "" : options.name_deprecated->c_str(), |
options.size); |
- if (-1 == mapped_file_) { |
+ shm_ = SharedMemoryHandle::ImportHandle(fd); |
+ if (!shm_.IsValid()) { |
DLOG(ERROR) << "Shared memory creation failed"; |
return false; |
} |
- int err = ashmem_set_prot_region(mapped_file_, |
+ int err = ashmem_set_prot_region(shm_.GetHandle(), |
PROT_READ | PROT_WRITE | PROT_EXEC); |
if (err < 0) { |
DLOG(ERROR) << "Error " << err << " when setting protection of ashmem"; |
@@ -41,7 +42,7 @@ bool SharedMemory::Create(const SharedMemoryCreateOptions& options) { |
// Android doesn't appear to have a way to drop write access on an ashmem |
// segment for a single descriptor. http://crbug.com/320865 |
- readonly_mapped_file_ = dup(mapped_file_); |
+ readonly_mapped_file_ = dup(shm_.GetHandle()); |
if (-1 == readonly_mapped_file_) { |
DPLOG(ERROR) << "dup() failed"; |
return false; |