diff options
Diffstat (limited to 'src/core/hle/kernel/timer.cpp')
| -rw-r--r-- | src/core/hle/kernel/timer.cpp | 12 |
1 files changed, 3 insertions, 9 deletions
diff --git a/src/core/hle/kernel/timer.cpp b/src/core/hle/kernel/timer.cpp index 3b0452d4d..2d4fa4c01 100644 --- a/src/core/hle/kernel/timer.cpp +++ b/src/core/hle/kernel/timer.cpp | |||
| @@ -13,7 +13,7 @@ | |||
| 13 | 13 | ||
| 14 | namespace Kernel { | 14 | namespace Kernel { |
| 15 | 15 | ||
| 16 | class Timer : public Object { | 16 | class Timer : public WaitObject { |
| 17 | public: | 17 | public: |
| 18 | std::string GetTypeName() const override { return "Timer"; } | 18 | std::string GetTypeName() const override { return "Timer"; } |
| 19 | std::string GetName() const override { return name; } | 19 | std::string GetName() const override { return name; } |
| @@ -24,7 +24,6 @@ public: | |||
| 24 | ResetType reset_type; ///< The ResetType of this timer | 24 | ResetType reset_type; ///< The ResetType of this timer |
| 25 | 25 | ||
| 26 | bool signaled; ///< Whether the timer has been signaled or not | 26 | bool signaled; ///< Whether the timer has been signaled or not |
| 27 | std::set<Handle> waiting_threads; ///< Threads that are waiting for the timer | ||
| 28 | std::string name; ///< Name of timer (optional) | 27 | std::string name; ///< Name of timer (optional) |
| 29 | 28 | ||
| 30 | u64 initial_delay; ///< The delay until the timer fires for the first time | 29 | u64 initial_delay; ///< The delay until the timer fires for the first time |
| @@ -33,7 +32,7 @@ public: | |||
| 33 | ResultVal<bool> WaitSynchronization() override { | 32 | ResultVal<bool> WaitSynchronization() override { |
| 34 | bool wait = !signaled; | 33 | bool wait = !signaled; |
| 35 | if (wait) { | 34 | if (wait) { |
| 36 | waiting_threads.insert(GetCurrentThread()->GetHandle()); | 35 | AddWaitingThread(GetCurrentThread()); |
| 37 | Kernel::WaitCurrentThread(WAITTYPE_TIMER, this); | 36 | Kernel::WaitCurrentThread(WAITTYPE_TIMER, this); |
| 38 | } | 37 | } |
| 39 | return MakeResult<bool>(wait); | 38 | return MakeResult<bool>(wait); |
| @@ -92,12 +91,7 @@ static void TimerCallback(u64 timer_handle, int cycles_late) { | |||
| 92 | timer->signaled = true; | 91 | timer->signaled = true; |
| 93 | 92 | ||
| 94 | // Resume all waiting threads | 93 | // Resume all waiting threads |
| 95 | for (Handle thread_handle : timer->waiting_threads) { | 94 | timer->ResumeAllWaitingThreads(); |
| 96 | if (SharedPtr<Thread> thread = Kernel::g_handle_table.Get<Thread>(thread_handle)) | ||
| 97 | thread->ResumeFromWait(); | ||
| 98 | } | ||
| 99 | |||
| 100 | timer->waiting_threads.clear(); | ||
| 101 | 95 | ||
| 102 | if (timer->reset_type == RESETTYPE_ONESHOT) | 96 | if (timer->reset_type == RESETTYPE_ONESHOT) |
| 103 | timer->signaled = false; | 97 | timer->signaled = false; |