OpenAFS Master Repository branch, openafs-stable-1_6_x, updated. openafs-stable-1_6_1pre2-155-g55dbeea

Gerrit Code Review
Tue, 28 Aug 2012 05:42:03 -0700 (PDT)

The following commit has been merged in the openafs-stable-1_6_x branch:
commit 55dbeea07680f11f0b39bd21bb64a87e5e506b9e
Author: Andrew Deason <>
Date:   Mon Aug 27 14:33:47 2012 -0400

    rx: dec rx_nWaiting on clearing RX_CALL_WAIT_PROC
    Currently, a couple of callers (rxi_ResetCall, and
    rxi_AttachServerProc) will decrement rx_nWaiting only if
    RX_CALL_WAIT_PROC is set for a call, and the call is on a queue
    (presumably rx_incomingCallQueue). This can cause an imbalance in
    rx_nWaiting if these code paths are reached when, in another thread,
    rx_GetCall has removed the call from its queue, but it has not yet
    cleared RX_CALL_WAIT_PROC (this can happen while it is waiting for
    call->lock). In this situation, rx_GetCall will remove the call from
    its queue, wait, and e.g. rxi_ResetCall will clear RX_CALL_WAIT_PROC;
    neither will decrement rx_nWaiting.
    This is possible if a new call is started on a call channel with an
    extant call that is waiting for a thread; we will rxi_ResetCall in
    rxi_ReceivePacket, but rx_GetCall may be running at the same time.
    This race may also be possible via rxi_AttachServerProc via
    rxi_UpdatePeerReach -> TryAttach -> rxi_AttachServerProc while
    rx_GetCall is running, but I'm not sure.
    To avoid this, decrement rx_nWaiting based on RX_CALL_WAIT_PROC alone,
    regardless of whether or not the call is on a queue. This mirrors the
    incrementing rx_nWaiting behavior, where rx_nWaiting is only
    incremented if RX_CALL_WAIT_PROC is unset for a call, so this should
    guarantee that rx_nWaiting does not become unbalanced.
    Backport of commit 660720d1f54a867e21f78b6ec4c024235e4c37b7
    Change-Id: I3372e053d284e10702971769487a7580a6842ef2
    Tested-by: BuildBot <>
    Reviewed-by: Derrick Brashear <>

 src/rx/rx.c |   20 ++++++++------------
 1 files changed, 8 insertions(+), 12 deletions(-)

OpenAFS Master Repository