summaryrefslogtreecommitdiff
path: root/Kernel/Net
diff options
context:
space:
mode:
authorAndreas Kling <kling@serenityos.org>2021-08-24 12:14:14 +0200
committerAndreas Kling <kling@serenityos.org>2021-08-24 16:37:28 +0200
commit82c3cc4640484e10e3bea6370fd8a7c23045307d (patch)
tree6fe6ce3a7379b68ac042b8816c6952c6d98c56ec /Kernel/Net
parentc108c8ff24a2f7347d21b21a688331233183c0eb (diff)
downloadserenity-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.cpp6
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)