| Index: content/common/host_discardable_shared_memory_manager.cc
|
| diff --git a/content/common/host_discardable_shared_memory_manager.cc b/content/common/host_discardable_shared_memory_manager.cc
|
| index 90eee02594c38a9629b84a443c3ed0076ba2c9e2..539136179e3affa9d0b61f74a7945311cd9476dc 100644
|
| --- a/content/common/host_discardable_shared_memory_manager.cc
|
| +++ b/content/common/host_discardable_shared_memory_manager.cc
|
| @@ -325,6 +325,9 @@ void HostDiscardableSharedMemoryManager::AllocateLockedDiscardableSharedMemory(
|
| return;
|
| }
|
|
|
| + // Close file descriptor to avoid running out.
|
| + memory->Close();
|
| +
|
| base::CheckedNumeric<size_t> checked_bytes_allocated = bytes_allocated_;
|
| checked_bytes_allocated += memory->mapped_size();
|
| if (!checked_bytes_allocated.IsValid()) {
|
| @@ -335,11 +338,6 @@ void HostDiscardableSharedMemoryManager::AllocateLockedDiscardableSharedMemory(
|
| bytes_allocated_ = checked_bytes_allocated.ValueOrDie();
|
| BytesAllocatedChanged(bytes_allocated_);
|
|
|
| -#if !defined(DISCARDABLE_SHARED_MEMORY_SHRINKING)
|
| - // Close file descriptor to avoid running out.
|
| - memory->Close();
|
| -#endif
|
| -
|
| scoped_refptr<MemorySegment> segment(new MemorySegment(memory.Pass()));
|
| process_segments[id] = segment.get();
|
| segments_.push_back(segment.get());
|
| @@ -429,17 +427,14 @@ void HostDiscardableSharedMemoryManager::ReduceMemoryUsageUntilWithinLimit(
|
| scoped_refptr<MemorySegment> segment = segments_.back();
|
| segments_.pop_back();
|
|
|
| + // Simply drop the reference and continue if memory has already been
|
| + // unmapped. This happens when a memory segment has been deleted by
|
| + // the client.
|
| + if (!segment->memory()->mapped_size())
|
| + continue;
|
| +
|
| // Attempt to purge LRU segment. When successful, released the memory.
|
| if (segment->memory()->Purge(current_time)) {
|
| -#if defined(DISCARDABLE_SHARED_MEMORY_SHRINKING)
|
| - size_t size = segment->memory()->mapped_size();
|
| - DCHECK_GE(bytes_allocated_, size);
|
| - bytes_allocated_ -= size;
|
| - // Shrink memory segment. This will immediately release the memory to
|
| - // the OS.
|
| - segment->memory()->Shrink();
|
| - DCHECK_EQ(segment->memory()->mapped_size(), 0u);
|
| -#endif
|
| ReleaseMemory(segment->memory());
|
| continue;
|
| }
|
|
|