Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(980)

Side by Side Diff: mojo/system/raw_shared_buffer_posix.cc

Issue 219023010: Mojo: RawSharedBuffer::Mapping -> RawSharedBufferMapping. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: win Created 6 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « mojo/system/raw_shared_buffer.cc ('k') | mojo/system/raw_shared_buffer_unittest.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "mojo/system/raw_shared_buffer.h" 5 #include "mojo/system/raw_shared_buffer.h"
6 6
7 #include <stdint.h> 7 #include <stdint.h>
8 #include <stdio.h> // For |fileno()|. 8 #include <stdio.h> // For |fileno()|.
9 #include <sys/mman.h> // For |mmap()|/|munmap()|. 9 #include <sys/mman.h> // For |mmap()|/|munmap()|.
10 #include <sys/types.h> // For |off_t|. 10 #include <sys/types.h> // For |off_t|.
(...skipping 12 matching lines...) Expand all
23 #include "mojo/embedder/platform_handle.h" 23 #include "mojo/embedder/platform_handle.h"
24 24
25 // We assume that |size_t| and |off_t| (type for |ftruncate()|) fits in a 25 // We assume that |size_t| and |off_t| (type for |ftruncate()|) fits in a
26 // |uint64_t|. 26 // |uint64_t|.
27 COMPILE_ASSERT(sizeof(size_t) <= sizeof(uint64_t), size_t_too_big); 27 COMPILE_ASSERT(sizeof(size_t) <= sizeof(uint64_t), size_t_too_big);
28 COMPILE_ASSERT(sizeof(off_t) <= sizeof(uint64_t), off_t_too_big); 28 COMPILE_ASSERT(sizeof(off_t) <= sizeof(uint64_t), off_t_too_big);
29 29
30 namespace mojo { 30 namespace mojo {
31 namespace system { 31 namespace system {
32 32
33 // RawSharedBuffer::Mapping ----------------------------------------------------
34
35 void RawSharedBuffer::Mapping::Unmap() {
36 int result = munmap(real_base_, real_length_);
37 PLOG_IF(ERROR, result != 0) << "munmap";
38 }
39
40 // RawSharedBuffer ------------------------------------------------------------- 33 // RawSharedBuffer -------------------------------------------------------------
41 34
42 bool RawSharedBuffer::InitNoLock() { 35 bool RawSharedBuffer::InitNoLock() {
43 DCHECK(!handle_.is_valid()); 36 DCHECK(!handle_.is_valid());
44 37
45 base::ThreadRestrictions::ScopedAllowIO allow_io; 38 base::ThreadRestrictions::ScopedAllowIO allow_io;
46 39
47 if (static_cast<uint64_t>(num_bytes_) > 40 if (static_cast<uint64_t>(num_bytes_) >
48 static_cast<uint64_t>(std::numeric_limits<off_t>::max())) { 41 static_cast<uint64_t>(std::numeric_limits<off_t>::max())) {
49 return false; 42 return false;
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
82 75
83 if (HANDLE_EINTR(ftruncate(fd.get(), static_cast<off_t>(num_bytes_))) != 0) { 76 if (HANDLE_EINTR(ftruncate(fd.get(), static_cast<off_t>(num_bytes_))) != 0) {
84 PLOG(ERROR) << "ftruncate"; 77 PLOG(ERROR) << "ftruncate";
85 return false; 78 return false;
86 } 79 }
87 80
88 handle_.reset(embedder::PlatformHandle(fd.release())); 81 handle_.reset(embedder::PlatformHandle(fd.release()));
89 return true; 82 return true;
90 } 83 }
91 84
92 scoped_ptr<RawSharedBuffer::Mapping> RawSharedBuffer::MapImplNoLock( 85 scoped_ptr<RawSharedBufferMapping> RawSharedBuffer::MapImplNoLock(
93 size_t offset, 86 size_t offset,
94 size_t length) { 87 size_t length) {
95 lock_.AssertAcquired(); 88 lock_.AssertAcquired();
96 89
97 size_t offset_rounding = offset % base::SysInfo::VMAllocationGranularity(); 90 size_t offset_rounding = offset % base::SysInfo::VMAllocationGranularity();
98 size_t real_offset = offset - offset_rounding; 91 size_t real_offset = offset - offset_rounding;
99 size_t real_length = length + offset_rounding; 92 size_t real_length = length + offset_rounding;
100 93
101 // This should hold (since we checked |num_bytes| versus the maximum value of 94 // This should hold (since we checked |num_bytes| versus the maximum value of
102 // |off_t| on creation, but it never hurts to be paranoid. 95 // |off_t| on creation, but it never hurts to be paranoid.
103 DCHECK_LE(static_cast<uint64_t>(real_offset), 96 DCHECK_LE(static_cast<uint64_t>(real_offset),
104 static_cast<uint64_t>(std::numeric_limits<off_t>::max())); 97 static_cast<uint64_t>(std::numeric_limits<off_t>::max()));
105 98
106 void* real_base = mmap(NULL, real_length, PROT_READ | PROT_WRITE, MAP_SHARED, 99 void* real_base = mmap(NULL, real_length, PROT_READ | PROT_WRITE, MAP_SHARED,
107 handle_.get().fd, static_cast<off_t>(real_offset)); 100 handle_.get().fd, static_cast<off_t>(real_offset));
108 // |mmap()| should return |MAP_FAILED| (a.k.a. -1) on error. But it shouldn't 101 // |mmap()| should return |MAP_FAILED| (a.k.a. -1) on error. But it shouldn't
109 // return null either. 102 // return null either.
110 if (real_base == MAP_FAILED || !real_base) { 103 if (real_base == MAP_FAILED || !real_base) {
111 PLOG(ERROR) << "mmap"; 104 PLOG(ERROR) << "mmap";
112 return scoped_ptr<Mapping>(); 105 return scoped_ptr<RawSharedBufferMapping>();
113 } 106 }
114 107
115 void* base = static_cast<char*>(real_base) + offset_rounding; 108 void* base = static_cast<char*>(real_base) + offset_rounding;
116 return make_scoped_ptr(new Mapping(base, length, real_base, real_length)); 109 return make_scoped_ptr(
110 new RawSharedBufferMapping(base, length, real_base, real_length));
111 }
112
113 // RawSharedBufferMapping ------------------------------------------------------
114
115 void RawSharedBufferMapping::Unmap() {
116 int result = munmap(real_base_, real_length_);
117 PLOG_IF(ERROR, result != 0) << "munmap";
117 } 118 }
118 119
119 } // namespace system 120 } // namespace system
120 } // namespace mojo 121 } // namespace mojo
OLDNEW
« no previous file with comments | « mojo/system/raw_shared_buffer.cc ('k') | mojo/system/raw_shared_buffer_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698