mirror of
https://github.com/RGBCube/serenity
synced 2025-07-25 18:37:35 +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
|
@ -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;
|
||||
});
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue