From a84c6b0ece1fdee4f462c6ce27fa78c2e0d419f4 Mon Sep 17 00:00:00 2001 From: Andrew Deason Date: Tue, 13 Nov 2012 22:46:34 -0600 Subject: [PATCH] rx: Generate BUSY packets for error call channels Currently, if a call is error'd out but still active, we won't generate BUSY packets if another call comes in on the same channel. This is because we bail out earlier, here, before we get to the BUSY processing. The comments suggest that this is for if we enter an error state while waiting for TQ to clear. So, only do this if our error has changed. Change-Id: I070f2af16bc79b1ebc7d19b7cb761fdbca78344b Reviewed-on: http://gerrit.openafs.org/8460 Tested-by: BuildBot Reviewed-by: Jeffrey Altman Reviewed-by: Simon Wilkinson Reviewed-by: Derrick Brashear --- src/rx/rx.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/rx/rx.c b/src/rx/rx.c index 45861e5a4e..1a08e305bb 100644 --- a/src/rx/rx.c +++ b/src/rx/rx.c @@ -3311,12 +3311,13 @@ rxi_ReceiveServerCall(osi_socket socket, struct rx_packet *np, */ #ifdef RX_ENABLE_LOCKS if (call->state == RX_STATE_ACTIVE) { + int old_error = call->error; rxi_WaitforTQBusy(call); /* If we entered error state while waiting, * must call rxi_CallError to permit rxi_ResetCall * to processed when the tqWaiter count hits zero. */ - if (call->error) { + if (call->error && call->error != old_error) { rxi_CallError(call, call->error); MUTEX_EXIT(&call->lock); return NULL;