]> git.michaelhowe.org Git - packages/o/openafs.git/commitdiff
rx_ClearTransmitQueue should signal waiters when flushing
authorDerrick Brashear <shadow@dementia.org>
Fri, 2 Apr 2010 01:33:49 +0000 (21:33 -0400)
committerDerrick Brashear <shadow@dementia.org>
Mon, 5 Apr 2010 04:47:00 +0000 (21:47 -0700)
if we flush, play it safe and signal tq waiters.

Change-Id: I945649c2e440c78c5c5a62da70236a67dc190228
Reviewed-on: http://gerrit.openafs.org/1682
Reviewed-by: Jeffrey Altman <jaltman@openafs.org>
Tested-by: Jeffrey Altman <jaltman@openafs.org>
Reviewed-by: Derrick Brashear <shadow@dementia.org>
src/rx/rx.c

index bf879fecd521f34cce86bdf55e5233edb6f02171..70a1eb44a98ec4def0eca52a04115a7d726b0c0b 100755 (executable)
@@ -4464,6 +4464,13 @@ rxi_ClearTransmitQueue(struct rx_call *call, int force)
         call->tqc -=
 #endif /* RXDEBUG_PACKET */
             rxi_FreePackets(0, &call->tq);
+       if (call->tqWaiters || (call->flags & RX_CALL_TQ_WAIT)) {
+#ifdef RX_ENABLE_LOCKS
+           CV_BROADCAST(&call->cv_tq);
+#else /* RX_ENABLE_LOCKS */
+           osi_rxWakeup(&call->tq);
+#endif /* RX_ENABLE_LOCKS */
+       }
 #ifdef AFS_GLOBAL_RXLOCK_KERNEL
        call->flags &= ~RX_CALL_TQ_CLEARME;
     }
@@ -4739,14 +4746,6 @@ rxi_ResetCall(struct rx_call *call, int newcall)
            dpf(("rcall %"AFS_PTR_FMT" has %d waiters and flags %d\n", call, call->tqWaiters, call->flags));
        }
        call->flags = 0;
-       while (call->tqWaiters) {
-#ifdef RX_ENABLE_LOCKS
-           CV_BROADCAST(&call->cv_tq);
-#else /* RX_ENABLE_LOCKS */
-           osi_rxWakeup(&call->tq);
-#endif /* RX_ENABLE_LOCKS */
-           call->tqWaiters--;
-       }
     }
 
     rxi_ClearReceiveQueue(call);