From 553c76ab0f040ef692f05332553c0415aebc696b Mon Sep 17 00:00:00 2001 From: Bananymous Date: Sat, 17 May 2025 12:36:36 +0300 Subject: [PATCH] Kernel: Add locking to inode's epoll list This was prone to crashing :) --- kernel/include/kernel/FS/Inode.h | 1 + kernel/kernel/FS/Inode.cpp | 3 +++ 2 files changed, 4 insertions(+) diff --git a/kernel/include/kernel/FS/Inode.h b/kernel/include/kernel/FS/Inode.h index 35edb475..41ac60b8 100644 --- a/kernel/include/kernel/FS/Inode.h +++ b/kernel/include/kernel/FS/Inode.h @@ -175,6 +175,7 @@ namespace Kernel private: BAN::WeakPtr m_shared_region; + Mutex m_epoll_mutex; BAN::LinkedList m_epolls; friend class FileBackedRegion; friend class OpenFileDescriptorSet; diff --git a/kernel/kernel/FS/Inode.cpp b/kernel/kernel/FS/Inode.cpp index 69f795ba..cbc3f026 100644 --- a/kernel/kernel/FS/Inode.cpp +++ b/kernel/kernel/FS/Inode.cpp @@ -264,12 +264,14 @@ namespace Kernel BAN::ErrorOr Inode::add_epoll(class Epoll* epoll) { + LockGuard _(m_epoll_mutex); TRY(m_epolls.push_back(epoll)); return {}; } void Inode::del_epoll(class Epoll* epoll) { + LockGuard _(m_epoll_mutex); for (auto it = m_epolls.begin(); it != m_epolls.end(); it++) { if (*it != epoll) @@ -281,6 +283,7 @@ namespace Kernel void Inode::epoll_notify(uint32_t event) { + LockGuard _(m_epoll_mutex); for (auto* epoll : m_epolls) epoll->notify(this, event); }