Joe Maimon <jmaimon@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.