aboutsummaryrefslogtreecommitdiff
path: root/src/core/hle/kernel/k_thread.h
diff options
context:
space:
mode:
authorbunnei <bunneidev@gmail.com>2021-02-27 11:56:04 -0800
committerbunnei <bunneidev@gmail.com>2021-02-27 11:56:04 -0800
commit51fb0a6f9647ba199da10fe4f018ee36e44e65ba (patch)
tree89cd2ad6dfb310587aa546bb7b9847762795f08f /src/core/hle/kernel/k_thread.h
parent09f7c355c6d7e3c7845ba96d9704489d2d5853f4 (diff)
core: Switch to unique_ptr for usage of Common::Fiber.
- With using unique_ptr instead of shared_ptr, we have more explicit ownership of the context. - Fixes a memory leak due to circular reference of the shared pointer.
Diffstat (limited to 'src/core/hle/kernel/k_thread.h')
-rw-r--r--src/core/hle/kernel/k_thread.h10
1 files changed, 8 insertions, 2 deletions
diff --git a/src/core/hle/kernel/k_thread.h b/src/core/hle/kernel/k_thread.h
index c8ac656a4..a2893d939 100644
--- a/src/core/hle/kernel/k_thread.h
+++ b/src/core/hle/kernel/k_thread.h
@@ -293,7 +293,13 @@ public:
return thread_context_64;
}
- [[nodiscard]] std::shared_ptr<Common::Fiber>& GetHostContext();
+ [[nodiscard]] Common::Fiber* GetHostContext() {
+ return host_context.get();
+ }
+
+ [[nodiscard]] const Common::Fiber* GetHostContext() const {
+ return host_context.get();
+ }
[[nodiscard]] ThreadState GetState() const {
return thread_state & ThreadState::Mask;
@@ -719,7 +725,7 @@ private:
Common::SpinLock context_guard{};
// For emulation
- std::shared_ptr<Common::Fiber> host_context{};
+ std::unique_ptr<Common::Fiber> host_context{};
// For debugging
std::vector<KSynchronizationObject*> wait_objects_for_debugging;