TIMEOUT requests && then Duplicate Requests && then Threads block
Alan DeKok
aland at ox.org
Fri Oct 14 23:36:48 CEST 2005
Joe Maimon <jmaimon at ttec.com> wrote:
> Examining the request structure suggests that the TIMEOUT requests never
> hit rad_decode() or rad_respond()
Ah... that would be OK, then.
> I am working on the theory now that they were never dequeued.
Yup.
> 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.
Which would appear to indicate that there's a bug....
Hmm... I think that the lrad_hash_table_delete() function is being
called in the wrong place in threads.c. The order SHOULD be:
entry = finddata(queue, head)
if (!entry) {
head++;
// DON'T delete, entry==NULL means there's nothing to delete
}
...
delete(queue, head++);
I think the current order of "head++, delete(queue, head)" is a
little dumb.
If that works for you, I'll commit a fix.
Alan DeKok.
More information about the Freeradius-Devel
mailing list