From 7a696c4d638208ab0ae794f29fd391cf5c3719f5 Mon Sep 17 00:00:00 2001 From: Bananymous Date: Sat, 4 Jul 2026 19:19:10 +0300 Subject: [PATCH] Kenrel: Cleanup locking in close --- kernel/kernel/OpenFileDescriptorSet.cpp | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/kernel/kernel/OpenFileDescriptorSet.cpp b/kernel/kernel/OpenFileDescriptorSet.cpp index df9b005a..b414c71f 100644 --- a/kernel/kernel/OpenFileDescriptorSet.cpp +++ b/kernel/kernel/OpenFileDescriptorSet.cpp @@ -401,11 +401,19 @@ namespace Kernel BAN::ErrorOr OpenFileDescriptorSet::close(int fd) { - LockGuard _(m_mutex); + BAN::RefPtr open_file; - TRY(validate_fd(fd)); + { + LockGuard _(m_mutex); - auto& open_file = m_open_files[fd]; + TRY(validate_fd(fd)); + + open_file = m_open_files[fd]; + + m_open_files[fd]->file.inode->on_close(m_open_files[fd]->status_flags); + m_open_files[fd] = {}; + remove_cloexec(fd); + } if (auto& flock = open_file->flock; Thread::current().has_process() && flock.lockers.contains(Process::current().pid())) { @@ -429,10 +437,6 @@ namespace Kernel } } - open_file->file.inode->on_close(open_file->status_flags); - open_file = {}; - remove_cloexec(fd); - return {}; }