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

Unified Diff: base/memory/shared_memory_mac.cc

Issue 2845113005: Replace base::SharedMemory read-only methods with GetReadOnlyHandle. (Closed)
Patch Set: Comments from thakis. Created 3 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 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_mac_unittest.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 6acaee425ffa48c9bf0eda8ee0749ee21f8e51ca..9a6394949be2c990d117e50e0fe12e15ac06284d 100644
--- a/base/memory/shared_memory_mac.cc
+++ b/base/memory/shared_memory_mac.cc
@@ -83,7 +83,6 @@ bool MakeMachSharedMemoryHandleReadOnly(SharedMemoryHandle* new_handle,
SharedMemory::SharedMemory()
: mapped_memory_mechanism_(SharedMemoryHandle::MACH),
- readonly_mapped_file_(-1),
mapped_size_(0),
memory_(NULL),
read_only_(false),
@@ -92,7 +91,6 @@ SharedMemory::SharedMemory()
SharedMemory::SharedMemory(const SharedMemoryHandle& handle, bool read_only)
: shm_(handle),
mapped_memory_mechanism_(SharedMemoryHandle::POSIX),
- readonly_mapped_file_(-1),
mapped_size_(0),
memory_(NULL),
read_only_(read_only),
@@ -186,10 +184,12 @@ bool SharedMemory::Create(const SharedMemoryCreateOptions& options) {
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);
shm_ = SharedMemoryHandle(FileDescriptor(mapped_file, false));
+ readonly_shm_ =
+ SharedMemoryHandle(FileDescriptor(readonly_mapped_file, false));
return result;
}
@@ -254,65 +254,39 @@ void SharedMemory::Close() {
shm_.Close();
shm_ = SharedMemoryHandle();
if (shm_.type_ == SharedMemoryHandle::POSIX) {
- if (readonly_mapped_file_ > 0) {
- if (IGNORE_EINTR(close(readonly_mapped_file_)) < 0)
- PLOG(ERROR) << "close";
- readonly_mapped_file_ = -1;
+ if (readonly_shm_.IsValid()) {
+ readonly_shm_.Close();
+ readonly_shm_ = SharedMemoryHandle();
}
}
}
-bool SharedMemory::Share(SharedMemoryHandle* new_handle, ShareMode share_mode) {
- if (shm_.type_ == SharedMemoryHandle::MACH) {
- DCHECK(shm_.IsValid());
-
- bool success = false;
- switch (share_mode) {
- case SHARE_CURRENT_MODE:
- *new_handle = shm_.Duplicate();
- success = true;
- break;
- case SHARE_READONLY:
- success = MakeMachSharedMemoryHandleReadOnly(new_handle, shm_, memory_);
- break;
- }
-
- if (success)
- new_handle->SetOwnershipPassesToIPC(true);
-
- return success;
- }
-
- int handle_to_dup = -1;
- switch (share_mode) {
- case SHARE_CURRENT_MODE:
- handle_to_dup = shm_.file_descriptor_.fd;
- break;
- case SHARE_READONLY:
- // We could imagine re-opening the file from /dev/fd, but that can't make
- // it readonly on Mac: https://codereview.chromium.org/27265002/#msg10
- CHECK_GE(readonly_mapped_file_, 0);
- handle_to_dup = readonly_mapped_file_;
- break;
- }
-
- const int new_fd = HANDLE_EINTR(dup(handle_to_dup));
- if (new_fd < 0) {
- DPLOG(ERROR) << "dup() failed.";
- return false;
+SharedMemoryHandle SharedMemory::GetReadOnlyHandle() {
+ if (shm_.type_ == SharedMemoryHandle::POSIX) {
+ // We could imagine re-opening the file from /dev/fd, but that can't make it
+ // readonly on Mac: https://codereview.chromium.org/27265002/#msg10.
+ CHECK(readonly_shm_.IsValid());
+ return readonly_shm_.Duplicate();
}
- new_handle->file_descriptor_.fd = new_fd;
- new_handle->type_ = SharedMemoryHandle::POSIX;
+ DCHECK(shm_.IsValid());
+ base::SharedMemoryHandle new_handle;
+ bool success = MakeMachSharedMemoryHandleReadOnly(&new_handle, shm_, memory_);
+ if (success)
+ new_handle.SetOwnershipPassesToIPC(true);
+ return new_handle;
+}
- return true;
+bool SharedMemory::Share(SharedMemoryHandle* new_handle) {
+ DCHECK(shm_.IsValid());
+ *new_handle = shm_.Duplicate();
+ return new_handle->IsValid();
}
bool SharedMemory::ShareToProcessCommon(ProcessHandle process,
SharedMemoryHandle* new_handle,
- bool close_self,
- ShareMode share_mode) {
- bool success = Share(new_handle, share_mode);
+ bool close_self) {
+ bool success = Share(new_handle);
if (close_self) {
Unmap();
Close();
« no previous file with comments | « base/memory/shared_memory_helper.cc ('k') | base/memory/shared_memory_mac_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698