1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-05-26 01:55:08 +00:00

Kernel: Simplify unregistering a Blocker from a BlockerSet

The BlockerSet stores its blockers along with a "void* data" that may
contain some blocker-specific context relevant to the specific blocker
registration (for example, SelectBlocker stores a pointer to the
relevant entry in an array of SelectBlocker::FDInfo structs.)

When unregistering a blocker from a set, we don't need to key the
blocker by both the Blocker* and the data. Just the Blocker* is enough,
since all registrations for that blocker need to be removed anyway as
the blocker is about to be destroyed.

So we stop passing the "void* data" to BlockerSet::remove_blocker(),
which also allows us to remove the now-unneeded Blocker::m_block_data.
This commit is contained in:
Andreas Kling 2021-08-24 00:34:11 +02:00
parent 6ce05026b4
commit c351945474
2 changed files with 5 additions and 7 deletions

View file

@ -33,7 +33,6 @@ bool Thread::Blocker::add_to_blocker_set(Thread::BlockerSet& blocker_set, void*
VERIFY(!m_blocker_set);
if (blocker_set.add_blocker(*this, data)) {
m_blocker_set = &blocker_set;
m_block_data = data;
return true;
}
return false;
@ -43,7 +42,7 @@ Thread::Blocker::~Blocker()
{
VERIFY(!m_lock.is_locked());
if (m_blocker_set)
m_blocker_set->remove_blocker(*this, m_block_data);
m_blocker_set->remove_blocker(*this);
}
void Thread::Blocker::begin_blocking(Badge<Thread>)
@ -355,7 +354,7 @@ Thread::SelectBlocker::SelectBlocker(FDVector& fds)
Thread::SelectBlocker::~SelectBlocker()
{
for (auto& fd_entry : m_fds)
fd_entry.description->blocker_set().remove_blocker(*this, &fd_entry);
fd_entry.description->blocker_set().remove_blocker(*this);
}
void Thread::SelectBlocker::will_unblock_immediately_without_blocking(UnblockImmediatelyReason reason)