diff --git a/Kernel/Process.cpp b/Kernel/Process.cpp index 6c225ab345..9b1a05b078 100644 --- a/Kernel/Process.cpp +++ b/Kernel/Process.cpp @@ -302,16 +302,19 @@ bool Process::unref() const // NOTE: We need to obtain the process list lock before doing anything, // because otherwise someone might get in between us lowering the // refcount and acquiring the lock. - return processes().with_exclusive([&](auto& list) { + auto did_hit_zero = processes().with_exclusive([&](auto& list) { auto new_ref_count = deref_base(); if (new_ref_count > 0) return false; if (m_list_node.is_in_list()) list.remove(*const_cast(this)); - delete this; return true; }); + + if (did_hit_zero) + delete this; + return did_hit_zero; } // Make sure the compiler doesn't "optimize away" this function: