| Index: base/shared_memory_posix.cc
|
| ===================================================================
|
| --- base/shared_memory_posix.cc (revision 188786)
|
| +++ base/shared_memory_posix.cc (working copy)
|
| @@ -42,20 +42,20 @@
|
|
|
| SharedMemory::SharedMemory()
|
| : mapped_file_(-1),
|
| + inode_(0),
|
| mapped_size_(0),
|
| - inode_(0),
|
| memory_(NULL),
|
| read_only_(false),
|
| - created_size_(0) {
|
| + requested_size_(0) {
|
| }
|
|
|
| SharedMemory::SharedMemory(SharedMemoryHandle handle, bool read_only)
|
| : mapped_file_(handle.fd),
|
| + inode_(0),
|
| mapped_size_(0),
|
| - inode_(0),
|
| memory_(NULL),
|
| read_only_(read_only),
|
| - created_size_(0) {
|
| + requested_size_(0) {
|
| struct stat st;
|
| if (fstat(handle.fd, &st) == 0) {
|
| // If fstat fails, then the file descriptor is invalid and we'll learn this
|
| @@ -67,11 +67,11 @@
|
| SharedMemory::SharedMemory(SharedMemoryHandle handle, bool read_only,
|
| ProcessHandle process)
|
| : mapped_file_(handle.fd),
|
| + inode_(0),
|
| mapped_size_(0),
|
| - inode_(0),
|
| memory_(NULL),
|
| read_only_(read_only),
|
| - created_size_(0) {
|
| + requested_size_(0) {
|
| // We don't handle this case yet (note the ignored parameter); let's die if
|
| // someone comes calling.
|
| NOTREACHED();
|
| @@ -164,7 +164,7 @@
|
| return false;
|
| }
|
| }
|
| - created_size_ = options.size;
|
| + requested_size_ = options.size;
|
| }
|
| if (fp == NULL) {
|
| #if !defined(OS_MACOSX)
|
| @@ -223,28 +223,28 @@
|
| if (bytes > static_cast<size_t>(std::numeric_limits<int>::max()))
|
| return false;
|
|
|
| -#if defined(OS_ANDROID)
|
| - if (bytes == 0) {
|
| - int ashmem_bytes = ashmem_get_size_region(mapped_file_);
|
| - if (ashmem_bytes < 0)
|
| - return false;
|
| -
|
| - DCHECK_GE(static_cast<uint32>(ashmem_bytes), bytes);
|
| - // The caller wants to determine the map region size from ashmem.
|
| - bytes = ashmem_bytes - offset;
|
| - // TODO(port): we set the created size here so that it is available in
|
| - // transport_dib_android.cc. We should use ashmem_get_size_region()
|
| - // in transport_dib_android.cc.
|
| - created_size_ = ashmem_bytes;
|
| - }
|
| -#endif
|
| -
|
| memory_ = mmap(NULL, bytes, PROT_READ | (read_only_ ? 0 : PROT_WRITE),
|
| MAP_SHARED, mapped_file_, offset);
|
|
|
| bool mmap_succeeded = memory_ != (void*)-1 && memory_ != NULL;
|
| if (mmap_succeeded) {
|
| mapped_size_ = bytes;
|
| +#if defined(OS_ANDROID)
|
| + if (bytes == 0) {
|
| + int ashmem_bytes = ashmem_get_size_region(mapped_file_);
|
| + if (ashmem_bytes < 0)
|
| + return false;
|
| +
|
| + DCHECK_GE(static_cast<uint32>(ashmem_bytes), bytes);
|
| + // The caller wants to determine the map region size from ashmem.
|
| + bytes = ashmem_bytes - offset;
|
| + // TODO(port): we set the created size here so that it is available in
|
| + // transport_dib_android.cc. We should use ashmem_get_size_region()
|
| + // in transport_dib_android.cc.
|
| + mapped_size_ = ashmem_bytes;
|
| + }
|
| +#endif
|
| +
|
| DCHECK_EQ(0U, reinterpret_cast<uintptr_t>(memory_) &
|
| (SharedMemory::MAP_MINIMUM_ALIGNMENT - 1));
|
| } else {
|
|
|