1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-25 04:07:44 +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

@ -393,7 +393,6 @@ public:
private:
BlockerSet* m_blocker_set { nullptr };
void* m_block_data { nullptr };
Thread* m_blocked_thread { nullptr };
u8 m_was_interrupted_by_signal { 0 };
bool m_is_blocking { false };
@ -423,12 +422,12 @@ public:
return true;
}
void remove_blocker(Blocker& blocker, void* data)
void remove_blocker(Blocker& blocker)
{
SpinlockLocker lock(m_lock);
// NOTE: it's possible that the blocker is no longer present
m_blockers.remove_first_matching([&](auto& info) {
return info.blocker == &blocker && info.data == data;
m_blockers.remove_all_matching([&](auto& info) {
return info.blocker == &blocker;
});
}