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:
parent
6ce05026b4
commit
c351945474
2 changed files with 5 additions and 7 deletions
|
@ -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)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue