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

Side by Side Diff: base/memory/shared_memory_posix.cc

Issue 1197853004: Revert of Revert of Make SharedMemoryHandle a class on Mac. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@shared_memory_make_class3_base
Patch Set: Created 5 years, 6 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
« no previous file with comments | « base/memory/shared_memory_nacl.cc ('k') | base/memory/shared_memory_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 (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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 "base/memory/shared_memory.h" 5 #include "base/memory/shared_memory.h"
6 6
7 #include <fcntl.h> 7 #include <fcntl.h>
8 #include <sys/mman.h> 8 #include <sys/mman.h>
9 #include <sys/stat.h> 9 #include <sys/stat.h>
10 #include <unistd.h> 10 #include <unistd.h>
11 11
12 #include "base/files/file_util.h" 12 #include "base/files/file_util.h"
13 #include "base/files/scoped_file.h" 13 #include "base/files/scoped_file.h"
14 #include "base/logging.h" 14 #include "base/logging.h"
15 #include "base/posix/eintr_wrapper.h" 15 #include "base/posix/eintr_wrapper.h"
16 #include "base/posix/safe_strerror.h" 16 #include "base/posix/safe_strerror.h"
17 #include "base/process/process_metrics.h" 17 #include "base/process/process_metrics.h"
18 #include "base/profiler/scoped_tracker.h" 18 #include "base/profiler/scoped_tracker.h"
19 #include "base/scoped_generic.h" 19 #include "base/scoped_generic.h"
20 #include "base/strings/utf_string_conversions.h" 20 #include "base/strings/utf_string_conversions.h"
21 21
22 #if defined(OS_MACOSX)
23 #include "base/mac/foundation_util.h"
24 #endif // OS_MACOSX
25
26 #if defined(OS_ANDROID) 22 #if defined(OS_ANDROID)
27 #include "base/os_compat_android.h" 23 #include "base/os_compat_android.h"
28 #include "third_party/ashmem/ashmem.h" 24 #include "third_party/ashmem/ashmem.h"
29 #endif 25 #endif
30 26
31 namespace base { 27 namespace base {
32 28
33 namespace { 29 namespace {
34 30
35 struct ScopedPathUnlinkerTraits { 31 struct ScopedPathUnlinkerTraits {
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after
103 99
104 SharedMemory::SharedMemory() 100 SharedMemory::SharedMemory()
105 : mapped_file_(-1), 101 : mapped_file_(-1),
106 readonly_mapped_file_(-1), 102 readonly_mapped_file_(-1),
107 mapped_size_(0), 103 mapped_size_(0),
108 memory_(NULL), 104 memory_(NULL),
109 read_only_(false), 105 read_only_(false),
110 requested_size_(0) { 106 requested_size_(0) {
111 } 107 }
112 108
113 SharedMemory::SharedMemory(SharedMemoryHandle handle, bool read_only) 109 SharedMemory::SharedMemory(const SharedMemoryHandle& handle, bool read_only)
114 : mapped_file_(handle.fd), 110 : mapped_file_(handle.fd),
115 readonly_mapped_file_(-1), 111 readonly_mapped_file_(-1),
116 mapped_size_(0), 112 mapped_size_(0),
117 memory_(NULL), 113 memory_(NULL),
118 read_only_(read_only), 114 read_only_(read_only),
119 requested_size_(0) { 115 requested_size_(0) {
120 } 116 }
121 117
122 SharedMemory::SharedMemory(SharedMemoryHandle handle, bool read_only, 118 SharedMemory::SharedMemory(const SharedMemoryHandle& handle,
119 bool read_only,
123 ProcessHandle process) 120 ProcessHandle process)
124 : mapped_file_(handle.fd), 121 : mapped_file_(handle.fd),
125 readonly_mapped_file_(-1), 122 readonly_mapped_file_(-1),
126 mapped_size_(0), 123 mapped_size_(0),
127 memory_(NULL), 124 memory_(NULL),
128 read_only_(read_only), 125 read_only_(read_only),
129 requested_size_(0) { 126 requested_size_(0) {
130 // We don't handle this case yet (note the ignored parameter); let's die if 127 // We don't handle this case yet (note the ignored parameter); let's die if
131 // someone comes calling. 128 // someone comes calling.
132 NOTREACHED(); 129 NOTREACHED();
(...skipping 150 matching lines...) Expand 10 before | Expand all | Expand 10 after
283 if (fstat(fileno(fp.get()), &stat) != 0) 280 if (fstat(fileno(fp.get()), &stat) != 0)
284 return false; 281 return false;
285 const size_t current_size = stat.st_size; 282 const size_t current_size = stat.st_size;
286 if (current_size != options.size) { 283 if (current_size != options.size) {
287 if (HANDLE_EINTR(ftruncate(fileno(fp.get()), options.size)) != 0) 284 if (HANDLE_EINTR(ftruncate(fileno(fp.get()), options.size)) != 0)
288 return false; 285 return false;
289 } 286 }
290 requested_size_ = options.size; 287 requested_size_ = options.size;
291 } 288 }
292 if (fp == NULL) { 289 if (fp == NULL) {
293 #if !defined(OS_MACOSX)
294 PLOG(ERROR) << "Creating shared memory in " << path.value() << " failed"; 290 PLOG(ERROR) << "Creating shared memory in " << path.value() << " failed";
295 FilePath dir = path.DirName(); 291 FilePath dir = path.DirName();
296 if (access(dir.value().c_str(), W_OK | X_OK) < 0) { 292 if (access(dir.value().c_str(), W_OK | X_OK) < 0) {
297 PLOG(ERROR) << "Unable to access(W_OK|X_OK) " << dir.value(); 293 PLOG(ERROR) << "Unable to access(W_OK|X_OK) " << dir.value();
298 if (dir.value() == "/dev/shm") { 294 if (dir.value() == "/dev/shm") {
299 LOG(FATAL) << "This is frequently caused by incorrect permissions on " 295 LOG(FATAL) << "This is frequently caused by incorrect permissions on "
300 << "/dev/shm. Try 'sudo chmod 1777 /dev/shm' to fix."; 296 << "/dev/shm. Try 'sudo chmod 1777 /dev/shm' to fix.";
301 } 297 }
302 } 298 }
303 #else
304 PLOG(ERROR) << "Creating shared memory in " << path.value() << " failed";
305 #endif
306 return false; 299 return false;
307 } 300 }
308 301
309 return PrepareMapFile(fp.Pass(), readonly_fd.Pass()); 302 return PrepareMapFile(fp.Pass(), readonly_fd.Pass());
310 } 303 }
311 304
312 // Our current implementation of shmem is with mmap()ing of files. 305 // Our current implementation of shmem is with mmap()ing of files.
313 // These files need to be deleted explicitly. 306 // These files need to be deleted explicitly.
314 // In practice this call is only needed for unit tests. 307 // In practice this call is only needed for unit tests.
315 bool SharedMemory::Delete(const std::string& name) { 308 bool SharedMemory::Delete(const std::string& name) {
(...skipping 136 matching lines...) Expand 10 before | Expand all | Expand 10 after
452 FilePath* path) { 445 FilePath* path) {
453 // mem_name will be used for a filename; make sure it doesn't 446 // mem_name will be used for a filename; make sure it doesn't
454 // contain anything which will confuse us. 447 // contain anything which will confuse us.
455 DCHECK_EQ(std::string::npos, mem_name.find('/')); 448 DCHECK_EQ(std::string::npos, mem_name.find('/'));
456 DCHECK_EQ(std::string::npos, mem_name.find('\0')); 449 DCHECK_EQ(std::string::npos, mem_name.find('\0'));
457 450
458 FilePath temp_dir; 451 FilePath temp_dir;
459 if (!GetShmemTempDir(false, &temp_dir)) 452 if (!GetShmemTempDir(false, &temp_dir))
460 return false; 453 return false;
461 454
462 #if !defined(OS_MACOSX)
463 #if defined(GOOGLE_CHROME_BUILD) 455 #if defined(GOOGLE_CHROME_BUILD)
464 std::string name_base = std::string("com.google.Chrome"); 456 std::string name_base = std::string("com.google.Chrome");
465 #else 457 #else
466 std::string name_base = std::string("org.chromium.Chromium"); 458 std::string name_base = std::string("org.chromium.Chromium");
467 #endif 459 #endif
468 #else // OS_MACOSX
469 std::string name_base = std::string(base::mac::BaseBundleID());
470 #endif // OS_MACOSX
471 *path = temp_dir.AppendASCII(name_base + ".shmem." + mem_name); 460 *path = temp_dir.AppendASCII(name_base + ".shmem." + mem_name);
472 return true; 461 return true;
473 } 462 }
474 #endif // !defined(OS_ANDROID) 463 #endif // !defined(OS_ANDROID)
475 464
476 bool SharedMemory::ShareToProcessCommon(ProcessHandle process, 465 bool SharedMemory::ShareToProcessCommon(ProcessHandle process,
477 SharedMemoryHandle* new_handle, 466 SharedMemoryHandle* new_handle,
478 bool close_self, 467 bool close_self,
479 ShareMode share_mode) { 468 ShareMode share_mode) {
480 int handle_to_dup = -1; 469 int handle_to_dup = -1;
(...skipping 20 matching lines...) Expand all
501 490
502 if (close_self) { 491 if (close_self) {
503 Unmap(); 492 Unmap();
504 Close(); 493 Close();
505 } 494 }
506 495
507 return true; 496 return true;
508 } 497 }
509 498
510 } // namespace base 499 } // namespace base
OLDNEW
« no previous file with comments | « base/memory/shared_memory_nacl.cc ('k') | base/memory/shared_memory_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698