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: openafs-stable-1_8_0pre1~2828 X-Git-Url: https://git.openafs.org/?p=openafs.git;a=commitdiff_plain;h=6ad3d646e62801cb81a3c9efeac320daa44936e1 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. Change-Id: Ie44a45734ab25bd3d2be3635c2e8f05857ca935e Reviewed-on: http://gerrit.openafs.org/6564 Tested-by: BuildBot Reviewed-by: Jeffrey Altman Reviewed-by: Derrick Brashear --- diff --git a/src/rx/rx.c b/src/rx/rx.c index 5857061..e3a4c6a 100644 --- a/src/rx/rx.c +++ b/src/rx/rx.c @@ -2006,7 +2006,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