forked from FreeRADIUS/freeradius-server
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
This error happens when "max_request_time" is set VERY low. i.e. lower than "response_window". (12s versus 30s). The current logic for enforcing the various timers is pretty bad. There is one timer per request, and it bounces around between the different requirements. At the time it was written, it seemed simpler than trying to manage 3-4 simultaneous timers per request. When the request is proxied, the timer being applied is for "response_window". BUT by the time that expires, the "max_request_time" has expired. The code *does* notice that it has expired. BUT it doesn't notice that there's no child thread processing the request. So it waits for the child thread to exit... forever. At some point, a timer overflows, and it dies. There are a few changes to make: 1) check for "no child" in this situation, and clean up the request rather than waiting forever. 2) cap the timer to 5 minutes (this can still happen, for example, when a bad DB locks a thread for hours at a time). 3) don't overflow when adding timer values.
- Loading branch information
Showing
1 changed file
with
29 additions
and
35 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters