From: Marc Dionne Date: Wed, 18 Jan 2012 01:19:54 +0000 (-0500) Subject: rx: Correctly test for end of call queue X-Git-Tag: upstream/1.6.1.pre2^2~6 X-Git-Url: https://git.michaelhowe.org/gitweb/?a=commitdiff_plain;h=339438c8473110bebdd31b23706e2e387560723f;p=packages%2Fo%2Fopenafs.git rx: Correctly test for end of call queue The intention of this condition is to check if the current call being considered is the last one on the queue, but the test is incorrect. A null next pointer indicates a removed item, not the end of the queue. Use the queue_IsLast macro instead to correctly determine that this is the last item in the queue and that a call has to be selected, either the current one or a previously seen good choice. This can cause calls to get permanently stuck in the call queue and never get assigned to a thread, even when all threads are idle. Reviewed-on: http://gerrit.openafs.org/6564 Tested-by: BuildBot Reviewed-by: Jeffrey Altman Reviewed-by: Derrick Brashear (cherry picked from commit 6ad3d646e62801cb81a3c9efeac320daa44936e1) Change-Id: Ic9d0ff51c79115960ebb4634fc35a5e9da21c380 Reviewed-on: http://gerrit.openafs.org/6570 Tested-by: BuildBot Reviewed-by: Derrick Brashear --- diff --git a/src/rx/rx.c b/src/rx/rx.c index ffb9a364b..918be8c1a 100644 --- a/src/rx/rx.c +++ b/src/rx/rx.c @@ -2004,7 +2004,7 @@ rx_GetCall(int tno, struct rx_service *cur_service, osi_socket * socketp) } MUTEX_ENTER(&rx_pthread_mutex); if (tno == rxi_fcfs_thread_num - || !tcall->queue_item_header.next) { + || queue_IsLast(&rx_incomingCallQueue, tcall)) { MUTEX_EXIT(&rx_pthread_mutex); /* If we're the fcfs thread , then we'll just use * this call. If we haven't been able to find an optimal