forked from Bananymous/banan-os
Kernel: Fix epoll reporting multiple of the same event
This commit is contained in:
@@ -128,16 +128,18 @@ namespace Kernel
|
|||||||
{
|
{
|
||||||
auto& [inode, events] = *it;
|
auto& [inode, events] = *it;
|
||||||
|
|
||||||
#define REMOVE_IT_AND_CONTINUE() \
|
#define REMOVE_IT() \
|
||||||
({ \
|
({ \
|
||||||
m_processing_events.remove(it); \
|
m_processing_events.remove(it); \
|
||||||
|
if (event_count > 0) \
|
||||||
|
break; \
|
||||||
it = m_processing_events.begin(); \
|
it = m_processing_events.begin(); \
|
||||||
continue; \
|
continue; \
|
||||||
})
|
})
|
||||||
|
|
||||||
auto listen_it = m_listening_events.find(inode);
|
auto listen_it = m_listening_events.find(inode);
|
||||||
if (listen_it == m_listening_events.end())
|
if (listen_it == m_listening_events.end())
|
||||||
REMOVE_IT_AND_CONTINUE();
|
REMOVE_IT();
|
||||||
auto& listen = listen_it->value;
|
auto& listen = listen_it->value;
|
||||||
|
|
||||||
{
|
{
|
||||||
@@ -149,7 +151,7 @@ namespace Kernel
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (events == 0)
|
if (events == 0)
|
||||||
REMOVE_IT_AND_CONTINUE();
|
REMOVE_IT();
|
||||||
|
|
||||||
{
|
{
|
||||||
LockGuard inode_locker(inode->m_mutex);
|
LockGuard inode_locker(inode->m_mutex);
|
||||||
@@ -165,9 +167,9 @@ namespace Kernel
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (events == 0)
|
if (events == 0)
|
||||||
REMOVE_IT_AND_CONTINUE();
|
REMOVE_IT();
|
||||||
|
|
||||||
#undef REMOVE_IT_AND_CONTINUE
|
#undef REMOVE_IT
|
||||||
|
|
||||||
for (size_t fd = 0; fd < listen.events.size() && event_count < event_span.size(); fd++)
|
for (size_t fd = 0; fd < listen.events.size() && event_count < event_span.size(); fd++)
|
||||||
{
|
{
|
||||||
|
|||||||
Reference in New Issue
Block a user