Matt Ezell wrote:
I instrumented threads.c, and it appears that a thread's "request" field doesn't get set to NULL after it handles a requests*. This is a problem, because the thread reaper uses the condition (handle->request == NULL) to mark a thread as THREAD_CANCELLED.
That sounds right.
I tested a small patch that appears to allow threads to cleanup, but I'm not sure if it's the right way to proceed with this. I tried to setup a pull request on github, but it looks like it tired to push my entire 2.1.x branch onto master (https://github.com/alandekok/freeradius-server/pull/51).
You clicked on "pull request" when you were viewing the branch. You should have viewed the commit, and then clicked on "pull request".
* I added the following code in threads.c in thread_pool_manage()
if (handle->request != NULL) { DEBUG2("Threads: thread %d NOT canceled, processing %i\n",handle->thread_num,handle->request->number); }
I'll take a look. Alan DeKok.