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