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

Unified Diff: base/memory/shared_memory_mac.cc

Issue 2872503003: Add crash keys about field trial shared memory errors. (Closed)
Patch Set: Rebased 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
« no previous file with comments | « base/memory/shared_memory_helper.cc ('k') | base/memory/shared_memory_posix.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: base/memory/shared_memory_mac.cc
diff --git a/base/memory/shared_memory_mac.cc b/base/memory/shared_memory_mac.cc
index ec74b0e5525411d476961807a7dfb132df2785e9..e7939b0192cf1382723b5e2cfae0da73347692cf 100644
--- a/base/memory/shared_memory_mac.cc
+++ b/base/memory/shared_memory_mac.cc
@@ -135,10 +135,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());
@@ -155,30 +160,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(
@@ -187,12 +193,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) {
@@ -201,6 +213,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;
}
« no previous file with comments | « base/memory/shared_memory_helper.cc ('k') | base/memory/shared_memory_posix.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698