diff options
| -rw-r--r-- | src/core/hle/kernel/vm_manager.cpp | 5 |
1 files changed, 4 insertions, 1 deletions
diff --git a/src/core/hle/kernel/vm_manager.cpp b/src/core/hle/kernel/vm_manager.cpp index 721f7cc44..6b2d78cc8 100644 --- a/src/core/hle/kernel/vm_manager.cpp +++ b/src/core/hle/kernel/vm_manager.cpp | |||
| @@ -765,11 +765,14 @@ void VMManager::MergeAdjacentVMA(VirtualMemoryArea& left, const VirtualMemoryAre | |||
| 765 | // Fast case: left is an entire backing block. | 765 | // Fast case: left is an entire backing block. |
| 766 | left.backing_block->insert(left.backing_block->end(), right_begin, right_end); | 766 | left.backing_block->insert(left.backing_block->end(), right_begin, right_end); |
| 767 | } else { | 767 | } else { |
| 768 | // Slow case: make a new memory block for left and right. | ||
| 768 | const auto left_begin = left.backing_block->begin() + left.offset; | 769 | const auto left_begin = left.backing_block->begin() + left.offset; |
| 769 | const auto left_end = left_begin + left.size; | 770 | const auto left_end = left_begin + left.size; |
| 771 | const auto left_size = static_cast<std::size_t>(std::distance(left_begin, left_end)); | ||
| 772 | const auto right_size = static_cast<std::size_t>(std::distance(right_begin, right_end)); | ||
| 770 | 773 | ||
| 771 | // Slow case: make a new memory block for left and right. | ||
| 772 | auto new_memory = std::make_shared<PhysicalMemory>(); | 774 | auto new_memory = std::make_shared<PhysicalMemory>(); |
| 775 | new_memory->reserve(left_size + right_size); | ||
| 773 | new_memory->insert(new_memory->end(), left_begin, left_end); | 776 | new_memory->insert(new_memory->end(), left_begin, left_end); |
| 774 | new_memory->insert(new_memory->end(), right_begin, right_end); | 777 | new_memory->insert(new_memory->end(), right_begin, right_end); |
| 775 | 778 | ||