epoll: make sure that connection waiting for data processing will be processed

This commit is contained in:
Evgeny Grin (Karlson2k)
2022-10-28 14:22:46 +03:00
parent d23d5400c4
commit 8565e7a8a9
+13 -3
View File
@@ -5301,10 +5301,20 @@ MHD_connection_handle_idle (struct MHD_Connection *connection)
enum MHD_Result
MHD_connection_epoll_update_ (struct MHD_Connection *connection)
{
struct MHD_Daemon *daemon = connection->daemon;
struct MHD_Daemon *const daemon = connection->daemon;
if ( (0 != (daemon->options & MHD_USE_EPOLL)) &&
(0 == (connection->epoll_state & MHD_EPOLL_STATE_IN_EPOLL_SET)) &&
mhd_assert (0 != (daemon->options & MHD_USE_EPOLL));
if ((0 != (MHD_EVENT_LOOP_INFO_PROCESS & connection->event_loop_info)) &&
(0 == (connection->epoll_state & MHD_EPOLL_STATE_IN_EREADY_EDLL)))
{
/* Make sure that connection waiting for processing will be processed */
EDLL_insert (daemon->eready_head,
daemon->eready_tail,
connection);
}
if ( (0 == (connection->epoll_state & MHD_EPOLL_STATE_IN_EPOLL_SET)) &&
(0 == (connection->epoll_state & MHD_EPOLL_STATE_SUSPENDED)) &&
( ( (MHD_EVENT_LOOP_INFO_WRITE == connection->event_loop_info) &&
(0 == (connection->epoll_state & MHD_EPOLL_STATE_WRITE_READY))) ||