| Index: base/memory/shared_memory_win.cc
|
| diff --git a/base/memory/shared_memory_win.cc b/base/memory/shared_memory_win.cc
|
| index 1dfa10fbe58b54b689d69c7ccde9e03015f9e758..daa700da6a373cd491ce56228f9b58037517c23f 100644
|
| --- a/base/memory/shared_memory_win.cc
|
| +++ b/base/memory/shared_memory_win.cc
|
| @@ -152,12 +152,11 @@ SharedMemory::SharedMemory(const std::wstring& name)
|
|
|
| SharedMemory::SharedMemory(const SharedMemoryHandle& handle, bool read_only)
|
| : external_section_(true),
|
| + shm_(handle),
|
| mapped_size_(0),
|
| memory_(NULL),
|
| read_only_(read_only),
|
| - requested_size_(0) {
|
| - mapped_file_.Set(handle.GetHandle());
|
| -}
|
| + requested_size_(0) {}
|
|
|
| SharedMemory::~SharedMemory() {
|
| Unmap();
|
| @@ -196,7 +195,7 @@ bool SharedMemory::Create(const SharedMemoryCreateOptions& options) {
|
| // wasting 32k per mapping on average.
|
| static const size_t kSectionMask = 65536 - 1;
|
| DCHECK(!options.executable);
|
| - DCHECK(!mapped_file_.Get());
|
| + DCHECK(!shm_.IsValid());
|
| if (options.size == 0) {
|
| LogError(SIZE_ZERO, 0);
|
| return false;
|
| @@ -241,9 +240,9 @@ bool SharedMemory::Create(const SharedMemoryCreateOptions& options) {
|
| rand_values[2], rand_values[3]);
|
| }
|
| DCHECK(!name_.empty());
|
| - mapped_file_.Set(CreateFileMappingWithReducedPermissions(&sa, rounded_size,
|
| - name_.c_str()));
|
| - if (!mapped_file_.IsValid()) {
|
| + shm_ = SharedMemoryHandle(CreateFileMappingWithReducedPermissions(
|
| + &sa, rounded_size, name_.c_str()));
|
| + if (!shm_.IsValid()) {
|
| // The error is logged within CreateFileMappingWithReducedPermissions().
|
| return false;
|
| }
|
| @@ -274,15 +273,15 @@ bool SharedMemory::Delete(const std::string& name) {
|
| }
|
|
|
| bool SharedMemory::Open(const std::string& name, bool read_only) {
|
| - DCHECK(!mapped_file_.Get());
|
| + DCHECK(!shm_.IsValid());
|
| DWORD access = FILE_MAP_READ | SECTION_QUERY;
|
| if (!read_only)
|
| access |= FILE_MAP_WRITE;
|
| name_ = ASCIIToUTF16(name);
|
| read_only_ = read_only;
|
| - mapped_file_.Set(
|
| + shm_ = SharedMemoryHandle(
|
| OpenFileMapping(access, false, name_.empty() ? nullptr : name_.c_str()));
|
| - if (!mapped_file_.IsValid())
|
| + if (!shm_.IsValid())
|
| return false;
|
| // If a name specified assume it's an external section.
|
| if (!name_.empty())
|
| @@ -292,7 +291,7 @@ bool SharedMemory::Open(const std::string& name, bool read_only) {
|
| }
|
|
|
| bool SharedMemory::MapAt(off_t offset, size_t bytes) {
|
| - if (!mapped_file_.Get())
|
| + if (!shm_.IsValid())
|
| return false;
|
|
|
| if (bytes > static_cast<size_t>(std::numeric_limits<int>::max()))
|
| @@ -301,11 +300,11 @@ bool SharedMemory::MapAt(off_t offset, size_t bytes) {
|
| if (memory_)
|
| return false;
|
|
|
| - if (external_section_ && !IsSectionSafeToMap(mapped_file_.Get()))
|
| + if (external_section_ && !IsSectionSafeToMap(shm_.GetHandle()))
|
| return false;
|
|
|
| memory_ = MapViewOfFile(
|
| - mapped_file_.Get(),
|
| + shm_.GetHandle(),
|
| read_only_ ? FILE_MAP_READ : FILE_MAP_READ | FILE_MAP_WRITE,
|
| static_cast<uint64_t>(offset) >> 32, static_cast<DWORD>(offset), bytes);
|
| if (memory_ != NULL) {
|
| @@ -329,7 +328,7 @@ bool SharedMemory::Unmap() {
|
| SharedMemoryHandle SharedMemory::GetReadOnlyHandle() {
|
| HANDLE result;
|
| ProcessHandle process = GetCurrentProcess();
|
| - if (!::DuplicateHandle(process, mapped_file_.Get(), process, &result,
|
| + if (!::DuplicateHandle(process, shm_.GetHandle(), process, &result,
|
| FILE_MAP_READ | SECTION_QUERY, FALSE, 0)) {
|
| return SharedMemoryHandle();
|
| }
|
| @@ -339,16 +338,20 @@ SharedMemoryHandle SharedMemory::GetReadOnlyHandle() {
|
| }
|
|
|
| void SharedMemory::Close() {
|
| - mapped_file_.Close();
|
| + if (shm_.IsValid()) {
|
| + shm_.Close();
|
| + shm_ = SharedMemoryHandle();
|
| + }
|
| }
|
|
|
| SharedMemoryHandle SharedMemory::handle() const {
|
| - return SharedMemoryHandle(mapped_file_.Get());
|
| + return shm_;
|
| }
|
|
|
| SharedMemoryHandle SharedMemory::TakeHandle() {
|
| - SharedMemoryHandle handle(mapped_file_.Take());
|
| + SharedMemoryHandle handle(shm_);
|
| handle.SetOwnershipPassesToIPC(true);
|
| + shm_ = SharedMemoryHandle();
|
| memory_ = nullptr;
|
| mapped_size_ = 0;
|
| return handle;
|
|
|