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

Unified Diff: base/memory/shared_memory_mac.cc

Issue 2872503003: Add crash keys about field trial shared memory errors. (Closed)
Patch Set: Add TODOs about cleaning up the code. Created 3 years, 7 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 side-by-side diff with in-line comments
Download patch
Index: base/memory/shared_memory_mac.cc
diff --git a/base/memory/shared_memory_mac.cc b/base/memory/shared_memory_mac.cc
index 0970fa01cc0737f1ea869b36552d5e455fac8e67..8f0edb57675a556f503411a07a214c8069d5142a 100644
--- a/base/memory/shared_memory_mac.cc
+++ b/base/memory/shared_memory_mac.cc
@@ -144,10 +144,15 @@ bool SharedMemory::GetSizeFromSharedMemoryHandle(
// "name == L"". The exception is in the StatsTable.
bool SharedMemory::Create(const SharedMemoryCreateOptions& options) {
DCHECK(!shm_.IsValid());
- if (options.size == 0) return false;
+ if (options.size == 0) {
+ last_error_ = SharedMemoryError::BAD_PARAMS;
+ return false;
+ }
- if (options.size > static_cast<size_t>(std::numeric_limits<int>::max()))
+ if (options.size > static_cast<size_t>(std::numeric_limits<int>::max())) {
+ last_error_ = SharedMemoryError::BAD_PARAMS;
return false;
+ }
if (options.type == SharedMemoryHandle::MACH) {
shm_ = SharedMemoryHandle(options.size, UnguessableToken::Create());
@@ -164,30 +169,31 @@ bool SharedMemory::Create(const SharedMemoryCreateOptions& options) {
ScopedFD readonly_fd;
FilePath path;
- bool result = CreateAnonymousSharedMemory(options, &fp, &readonly_fd, &path);
+ bool result = CreateAnonymousSharedMemory(options, &fp, &readonly_fd, &path,
+ &last_error_);
if (!result)
return false;
-
- if (!fp) {
- PLOG(ERROR) << "Creating shared memory in " << path.value() << " failed";
- return false;
- }
+ DCHECK(fp); // Should be guaranteed by CreateAnonymousSharedMemory().
// Get current size.
struct stat stat;
- if (fstat(fileno(fp.get()), &stat) != 0)
+ if (fstat(fileno(fp.get()), &stat) != 0) {
+ last_error_ = SharedMemoryError::STAT_FAILED;
return false;
+ }
const size_t current_size = stat.st_size;
if (current_size != options.size) {
- if (HANDLE_EINTR(ftruncate(fileno(fp.get()), options.size)) != 0)
+ if (HANDLE_EINTR(ftruncate(fileno(fp.get()), options.size)) != 0) {
+ last_error_ = SharedMemoryError::TRUNCATE_FAILED;
return false;
+ }
}
requested_size_ = options.size;
int mapped_file = -1;
int readonly_mapped_file = -1;
result = PrepareMapFile(std::move(fp), std::move(readonly_fd), &mapped_file,
- &readonly_mapped_file);
+ &readonly_mapped_file, &last_error_);
shm_ = SharedMemoryHandle(FileDescriptor(mapped_file, false),
UnguessableToken::Create());
readonly_shm_ = SharedMemoryHandle(
@@ -196,12 +202,18 @@ bool SharedMemory::Create(const SharedMemoryCreateOptions& options) {
}
bool SharedMemory::MapAt(off_t offset, size_t bytes) {
- if (!shm_.IsValid())
+ if (!shm_.IsValid()) {
+ last_error_ = SharedMemoryError::BAD_PARAMS;
return false;
- if (bytes > static_cast<size_t>(std::numeric_limits<int>::max()))
+ }
+ if (bytes > static_cast<size_t>(std::numeric_limits<int>::max())) {
+ last_error_ = SharedMemoryError::BAD_PARAMS;
return false;
- if (memory_)
+ }
+ if (memory_) {
+ last_error_ = SharedMemoryError::BAD_PARAMS;
return false;
+ }
bool success = shm_.MapAt(offset, bytes, &memory_, read_only_);
if (success) {
@@ -210,6 +222,7 @@ bool SharedMemory::MapAt(off_t offset, size_t bytes) {
(SharedMemory::MAP_MINIMUM_ALIGNMENT - 1));
mapped_memory_mechanism_ = shm_.type_;
} else {
+ last_error_ = SharedMemoryError::MMAP_FAILED;
memory_ = NULL;
}

Powered by Google App Engine
This is Rietveld 408576698