diff options
Diffstat (limited to 'Kernel/Thread.h')
-rw-r--r-- | Kernel/Thread.h | 20 |
1 files changed, 9 insertions, 11 deletions
diff --git a/Kernel/Thread.h b/Kernel/Thread.h index 91d2b065b6..3eef612e0d 100644 --- a/Kernel/Thread.h +++ b/Kernel/Thread.h @@ -346,7 +346,10 @@ public: BlockResult end_blocking(Badge<Thread>, bool); protected: - Blocker() { } + Blocker() + : m_thread(*Thread::current()) + { + } void do_set_interrupted_by_death() { @@ -371,19 +374,14 @@ public: } void unblock_from_blocker() { - RefPtr<Thread> thread; - { SpinlockLocker lock(m_lock); - if (m_is_blocking) { - m_is_blocking = false; - VERIFY(m_blocked_thread); - thread = m_blocked_thread; - } + if (!m_is_blocking) + return; + m_is_blocking = false; } - if (thread) - thread->unblock_from_blocker(*this); + m_thread->unblock_from_blocker(*this); } bool add_to_blocker_set(BlockerSet&, void* = nullptr); @@ -393,7 +391,7 @@ public: private: BlockerSet* m_blocker_set { nullptr }; - Thread* m_blocked_thread { nullptr }; + NonnullRefPtr<Thread> m_thread; u8 m_was_interrupted_by_signal { 0 }; bool m_is_blocking { false }; bool m_was_interrupted_by_death { false }; |