diff --git a/Kernel/Library/ListedRefCounted.h b/Kernel/Library/ListedRefCounted.h index 2dd8f47039..67e31a26a8 100644 --- a/Kernel/Library/ListedRefCounted.h +++ b/Kernel/Library/ListedRefCounted.h @@ -29,8 +29,12 @@ public: auto callback = [&](auto& list) { auto new_ref_count = deref_base(); - if (new_ref_count == 0) + if (new_ref_count == 0) { list.remove(const_cast(*that)); + if constexpr (requires { that->revoke_weak_ptrs(); }) { + that->revoke_weak_ptrs(); + } + } return new_ref_count; }; diff --git a/Kernel/Net/TCPSocket.cpp b/Kernel/Net/TCPSocket.cpp index 52a915f4ae..60bb2d949e 100644 --- a/Kernel/Net/TCPSocket.cpp +++ b/Kernel/Net/TCPSocket.cpp @@ -35,6 +35,7 @@ bool TCPSocket::unref() const if (deref_base()) return false; table.remove(tuple()); + const_cast(*this).revoke_weak_ptrs(); return true; }); if (did_hit_zero) { diff --git a/Kernel/TTY/SlavePTY.cpp b/Kernel/TTY/SlavePTY.cpp index 512f54e383..3de5662604 100644 --- a/Kernel/TTY/SlavePTY.cpp +++ b/Kernel/TTY/SlavePTY.cpp @@ -26,6 +26,7 @@ bool SlavePTY::unref() const if (deref_base()) return false; m_list_node.remove(); + const_cast(*this).revoke_weak_ptrs(); return true; }); if (did_hit_zero) {