mirror of
https://github.com/RGBCube/serenity
synced 2025-05-31 13:38:11 +00:00
Kernel: Make Thread::Blocker::m_thread a NonnullRefPtr<Thread>
There's no harm in the blocker always knowing which thread it originated from. It also simplifies some logic since we don't need to think about it ever being null.
This commit is contained in:
parent
c351945474
commit
a58c4bbcf5
2 changed files with 10 additions and 15 deletions
|
@ -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 };
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue