attachserverproc-dont-dequeue-if-not-in-queue-take-two-20040818
authorDerrick Brashear <shadow@dementia.org>
Wed, 18 Aug 2004 23:46:37 +0000 (23:46 +0000)
committerDerrick Brashear <shadow@dementia.org>
Wed, 18 Aug 2004 23:46:37 +0000 (23:46 +0000)
nWaiting ended up negative, because the dequeuer (GetCall) decremented.

src/rx/rx.c

index 303c81b..4281cc8 100644 (file)
@@ -3996,11 +3996,12 @@ rxi_AttachServerProc(register struct rx_call *call,
        if (call->flags & RX_CALL_WAIT_PROC) {
            /* Conservative:  I don't think this should happen */
            call->flags &= ~RX_CALL_WAIT_PROC;
-           MUTEX_ENTER(&rx_stats_mutex);
-           rx_nWaiting--;
-           MUTEX_EXIT(&rx_stats_mutex);
-           if (queue_IsOnQueue(call))
-               queue_Remove(call);
+           if (queue_IsOnQueue(call)) {
+               queue_Remove(call);
+               MUTEX_ENTER(&rx_stats_mutex);
+               rx_nWaiting--;
+               MUTEX_EXIT(&rx_stats_mutex);
+           }
        }
        call->state = RX_STATE_ACTIVE;
        call->mode = RX_MODE_RECEIVING;