Thanks for the detailed report, the patch looks good as-is, applied to
master as
f5d387df7e7fb8de1a5dd0739ddb83a8b19fe64b
Happy hacking!
Christian
On 8/11/21 6:02 PM, Irion, Alexander wrote:
Hello!
I discovered a problem with closing connections, when
MHD_OPTION_CONNECTION_TIMEOUT is used. When I set the timeout option to
3 seconds and connect with a browser, I get a timeout value from
MHD_get_timeout() of 3000 ms returned. I then sleep the desired time and
call MHD_run again(). Then, MHD_get_timeout() returns repetitive a
timeout of 0 which causes thousands of calls to MHD_run(), taking up
several hundred milliseconds and burning CPU time.
I use an external event loop with MHD_DAEMON_INFO_EPOLL_FD.
As reason I found that the condition timeout <
(MHD_monotonic_sec_counter () - connection->last_activity) will not be
true, after waiting the timeout time. The right side will be equal to
timeout, so the connection is not closed, MHD_get_timeout() continues to
return a timeout value of 0, and this runs repetitively in a loop for
some thousand iterations, until the time jumps to the next second.
In the attachment please find a small patch for fixing this issue. It's
just turning the < into a <=.