TIMEOUT requests && then Duplicate Requests && then Threads block

Joe Maimon jmaimon at ttec.com
Fri Oct 14 23:16:09 CEST 2005



Alan DeKok wrote:

> Joe Maimon <jmaimon at ttec.com> wrote:
> 
>>                 request->options |= RAD_REQUEST_OPTION_STOP_NOW;
>>/* This is the line I have added?? */
>>                 request->finished = TRUE;
> 
> 
>   And the server will likely core dump.
> 
>   The "finished" flag is used also as a "it's OK to free() the
> request" flag.  If the thread is still accessing it, it's a SEGV.
> 
>   The solution is to take those "dead" requests, and move them to a
> *separate* list, which is cleaned up periodically.  That way old
> requests don't prevent new ones from coming in.
> 
>   Alan DeKok.
> - 
> List info/subscribe/unsubscribe? See http://www.freeradius.org/list/devel.html
> 
> 
No segvs, instead the requests are being cleaned up.

Examining the request structure suggests that the TIMEOUT requests never 
hit rad_decode() or rad_respond()

(username is null .....)

I am working on the theory now that they were never dequeued.

This appears to be a thread spawning issue since it doesnt appear to 
happen under -s


How can I tell how many entries are in the queue?
(theory: at the time of the semaphore there are more requests in the 
queue than waiting threads)

lrad_hash_table_num_elements(thread_pool.queue)

does not appear to return anything other than an ever incrementing number.

Joe



More information about the Freeradius-Devel mailing list