From 82c4812730a6952424364ca8affbe70c83263dfe Mon Sep 17 00:00:00 2001 From: Tom Date: Wed, 30 Dec 2020 19:58:46 -0700 Subject: [PATCH] Kernel: Remove flawed SharedInodeVMObject assertion This assertion cannot be safely/reliably made in the ~SharedInodeVMObject destructor. The problem is that Inode::is_shared_vmobject holds a weak reference to the instance that is being destroyed (ref count 0). Checking the pointer using WeakPtr::unsafe_ptr will produce nullptr depending on timing in this case, and WeakPtr::safe_ref will reliably produce a nullptr as soon as the reference count drops to 0. The only case where this assertion could succeed is when WeakPtr::unsafe_ptr returned the pointer because it won the race against revoking it. And because WeakPtr::safe_ref will always return a nullptr, we cannot reliably assert this from the ~SharedInodeVMObject destructor. Fixes #4621 --- Kernel/VM/SharedInodeVMObject.cpp | 5 ----- Kernel/VM/SharedInodeVMObject.h | 2 -- 2 files changed, 7 deletions(-) diff --git a/Kernel/VM/SharedInodeVMObject.cpp b/Kernel/VM/SharedInodeVMObject.cpp index d3452ee4a8..d2065a6476 100644 --- a/Kernel/VM/SharedInodeVMObject.cpp +++ b/Kernel/VM/SharedInodeVMObject.cpp @@ -56,9 +56,4 @@ SharedInodeVMObject::SharedInodeVMObject(const SharedInodeVMObject& other) { } -SharedInodeVMObject::~SharedInodeVMObject() -{ - ASSERT(inode().is_shared_vmobject(*this)); -} - } diff --git a/Kernel/VM/SharedInodeVMObject.h b/Kernel/VM/SharedInodeVMObject.h index 6f01c26fa8..6875f692ff 100644 --- a/Kernel/VM/SharedInodeVMObject.h +++ b/Kernel/VM/SharedInodeVMObject.h @@ -36,8 +36,6 @@ class SharedInodeVMObject final : public InodeVMObject { AK_MAKE_NONMOVABLE(SharedInodeVMObject); public: - virtual ~SharedInodeVMObject() override; - static NonnullRefPtr create_with_inode(Inode&); virtual NonnullRefPtr clone() override;