|
From: | Irion, Alexander |
Subject: | [libmicrohttpd] Busy waiting up to one second using connection timeout |
Date: | Wed, 11 Aug 2021 16:02:58 +0000 |
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 <=.
Regards,
Alexander Irion
----------------- |
0001-Fix-busy-waiting-up-to-one-second-using-connection-t.patch
Description: 0001-Fix-busy-waiting-up-to-one-second-using-connection-t.patch
[Prev in Thread] | Current Thread | [Next in Thread] |