diff options
Diffstat (limited to 'src/core/hle')
| -rw-r--r-- | src/core/hle/kernel/k_page_table.cpp | 11 | 
1 files changed, 7 insertions, 4 deletions
| diff --git a/src/core/hle/kernel/k_page_table.cpp b/src/core/hle/kernel/k_page_table.cpp index 5ec183b9e..04276ab32 100644 --- a/src/core/hle/kernel/k_page_table.cpp +++ b/src/core/hle/kernel/k_page_table.cpp @@ -885,6 +885,9 @@ ResultCode KPageTable::SetMaxHeapSize(std::size_t size) {  }  ResultCode KPageTable::SetHeapSize(VAddr* out, std::size_t size) { +    // Lock the physical memory lock. +    std::lock_guard phys_lk(map_physical_memory_lock); +      // Try to perform a reduction in heap, instead of an extension.      VAddr cur_address{};      std::size_t allocation_size{}; @@ -1014,12 +1017,12 @@ ResultVal<VAddr> KPageTable::AllocateAndMapMemory(std::size_t needed_num_pages,      }      if (is_map_only) { -        CASCADE_CODE(Operate(addr, needed_num_pages, perm, OperationType::Map, map_addr)); +        R_TRY(Operate(addr, needed_num_pages, perm, OperationType::Map, map_addr));      } else {          KPageLinkedList page_group; -        CASCADE_CODE(system.Kernel().MemoryManager().Allocate(page_group, needed_num_pages, -                                                              memory_pool, allocation_option)); -        CASCADE_CODE(Operate(addr, needed_num_pages, page_group, OperationType::MapGroup)); +        R_TRY(system.Kernel().MemoryManager().Allocate(page_group, needed_num_pages, memory_pool, +                                                       allocation_option)); +        R_TRY(Operate(addr, needed_num_pages, page_group, OperationType::MapGroup));      }      block_manager->Update(addr, needed_num_pages, state, perm); | 
