diff options
| author | 2018-09-20 21:09:57 -0400 | |
|---|---|---|
| committer | 2018-09-20 21:10:00 -0400 | |
| commit | 05aa4aa01a0f9b9e3a5a0ea47b0d5719befce9b4 (patch) | |
| tree | 51d0560e5b690aa36554232f138bdac154865af7 | |
| parent | Merge pull request #1370 from Hedges/GDBClean (diff) | |
| download | yuzu-05aa4aa01a0f9b9e3a5a0ea47b0d5719befce9b4.tar.gz yuzu-05aa4aa01a0f9b9e3a5a0ea47b0d5719befce9b4.tar.xz yuzu-05aa4aa01a0f9b9e3a5a0ea47b0d5719befce9b4.zip | |
kernel/thread: Use owner_process when setting the page table in SetupMainThread()
The owning process of a thread is required to exist before the thread,
so we can enforce this API-wise by using a reference. We can also avoid
the reliance on the system instance by using that parameter to access
the page table that needs to be set.
| -rw-r--r-- | src/core/hle/kernel/process.cpp | 2 | ||||
| -rw-r--r-- | src/core/hle/kernel/thread.cpp | 6 | ||||
| -rw-r--r-- | src/core/hle/kernel/thread.h | 2 |
3 files changed, 5 insertions, 5 deletions
diff --git a/src/core/hle/kernel/process.cpp b/src/core/hle/kernel/process.cpp index 7a272d031..914bbe0a1 100644 --- a/src/core/hle/kernel/process.cpp +++ b/src/core/hle/kernel/process.cpp | |||
| @@ -125,7 +125,7 @@ void Process::Run(VAddr entry_point, s32 main_thread_priority, u32 stack_size) { | |||
| 125 | vm_manager.LogLayout(); | 125 | vm_manager.LogLayout(); |
| 126 | status = ProcessStatus::Running; | 126 | status = ProcessStatus::Running; |
| 127 | 127 | ||
| 128 | Kernel::SetupMainThread(kernel, entry_point, main_thread_priority, this); | 128 | Kernel::SetupMainThread(kernel, entry_point, main_thread_priority, *this); |
| 129 | } | 129 | } |
| 130 | 130 | ||
| 131 | void Process::LoadModule(SharedPtr<CodeSet> module_, VAddr base_addr) { | 131 | void Process::LoadModule(SharedPtr<CodeSet> module_, VAddr base_addr) { |
diff --git a/src/core/hle/kernel/thread.cpp b/src/core/hle/kernel/thread.cpp index d4183d6e3..c2d7535c9 100644 --- a/src/core/hle/kernel/thread.cpp +++ b/src/core/hle/kernel/thread.cpp | |||
| @@ -311,13 +311,13 @@ void Thread::BoostPriority(u32 priority) { | |||
| 311 | } | 311 | } |
| 312 | 312 | ||
| 313 | SharedPtr<Thread> SetupMainThread(KernelCore& kernel, VAddr entry_point, u32 priority, | 313 | SharedPtr<Thread> SetupMainThread(KernelCore& kernel, VAddr entry_point, u32 priority, |
| 314 | SharedPtr<Process> owner_process) { | 314 | Process& owner_process) { |
| 315 | // Setup page table so we can write to memory | 315 | // Setup page table so we can write to memory |
| 316 | SetCurrentPageTable(&Core::CurrentProcess()->vm_manager.page_table); | 316 | SetCurrentPageTable(&owner_process.vm_manager.page_table); |
| 317 | 317 | ||
| 318 | // Initialize new "main" thread | 318 | // Initialize new "main" thread |
| 319 | auto thread_res = Thread::Create(kernel, "main", entry_point, priority, 0, THREADPROCESSORID_0, | 319 | auto thread_res = Thread::Create(kernel, "main", entry_point, priority, 0, THREADPROCESSORID_0, |
| 320 | Memory::STACK_AREA_VADDR_END, std::move(owner_process)); | 320 | Memory::STACK_AREA_VADDR_END, &owner_process); |
| 321 | 321 | ||
| 322 | SharedPtr<Thread> thread = std::move(thread_res).Unwrap(); | 322 | SharedPtr<Thread> thread = std::move(thread_res).Unwrap(); |
| 323 | 323 | ||
diff --git a/src/core/hle/kernel/thread.h b/src/core/hle/kernel/thread.h index df4748942..91e9b79ec 100644 --- a/src/core/hle/kernel/thread.h +++ b/src/core/hle/kernel/thread.h | |||
| @@ -281,7 +281,7 @@ private: | |||
| 281 | * @return A shared pointer to the main thread | 281 | * @return A shared pointer to the main thread |
| 282 | */ | 282 | */ |
| 283 | SharedPtr<Thread> SetupMainThread(KernelCore& kernel, VAddr entry_point, u32 priority, | 283 | SharedPtr<Thread> SetupMainThread(KernelCore& kernel, VAddr entry_point, u32 priority, |
| 284 | SharedPtr<Process> owner_process); | 284 | Process& owner_process); |
| 285 | 285 | ||
| 286 | /** | 286 | /** |
| 287 | * Gets the current thread | 287 | * Gets the current thread |