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 {}; }