diff options
author | Andreas Kling <kling@serenityos.org> | 2021-08-24 12:14:14 +0200 |
---|---|---|
committer | Andreas Kling <kling@serenityos.org> | 2021-08-24 16:37:28 +0200 |
commit | 82c3cc4640484e10e3bea6370fd8a7c23045307d (patch) | |
tree | 6fe6ce3a7379b68ac042b8816c6952c6d98c56ec /Kernel/Net | |
parent | c108c8ff24a2f7347d21b21a688331233183c0eb (diff) | |
download | serenity-82c3cc4640484e10e3bea6370fd8a7c23045307d.zip |
Kernel: Move Blocker setup out from constructors into setup_blocker()
Instead of registering with blocker sets and whatnot in the various
Blocker subclass constructors, this patch moves such initialization
to a separate setup_blocker() virtual.
setup_blocker() returns false if there's no need to actually block
the thread. This allows us to bail earlier in Thread::block().
Diffstat (limited to 'Kernel/Net')
-rw-r--r-- | Kernel/Net/Routing.cpp | 6 |
1 files changed, 6 insertions, 0 deletions
diff --git a/Kernel/Net/Routing.cpp b/Kernel/Net/Routing.cpp index e756237de7..b4c6384463 100644 --- a/Kernel/Net/Routing.cpp +++ b/Kernel/Net/Routing.cpp @@ -25,6 +25,7 @@ public: virtual StringView state_string() const override { return "Routing (ARP)"sv; } virtual Type blocker_type() const override { return Type::Routing; } virtual bool should_block() override { return m_should_block; } + virtual bool setup_blocker() override; virtual void will_unblock_immediately_without_blocking(UnblockImmediatelyReason) override; @@ -86,8 +87,13 @@ ARPTableBlocker::ARPTableBlocker(IPv4Address ip_addr, Optional<MACAddress>& addr : m_ip_addr(ip_addr) , m_addr(addr) { +} + +bool ARPTableBlocker::setup_blocker() +{ if (!add_to_blocker_set(*s_arp_table_blocker_set)) m_should_block = false; + return m_should_block; } void ARPTableBlocker::will_unblock_immediately_without_blocking(UnblockImmediatelyReason reason) |