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