]> git.michaelhowe.org Git - packages/o/openafs.git/commitdiff
Clear the RX_CONN_ATTACHWAIT flag when an asymmetric client's calls
authorNickolai Zeldovich <kolya@mit.edu>
Thu, 22 Aug 2002 03:03:41 +0000 (03:03 +0000)
committerGarry Zacheiss <zacheiss@mit.edu>
Thu, 22 Aug 2002 03:03:41 +0000 (03:03 +0000)
time out; otherwise, the client could be locked out until the conn
is recycled.

(cherry picked from commit 7c20aa608273c5af8829183b325acbb2c356e038)

src/rx/rx.c

index 9058d7d8d990031bdc40f84f511899dd543e59c5..4599a6017b1a44fce231bf4f4ef295a1c74dc496 100644 (file)
@@ -2895,6 +2895,7 @@ static void rxi_CheckReachEvent(event, conn, acall)
     if (waiting) {
        if (!call) {
            MUTEX_ENTER(&conn->conn_call_lock);
+           MUTEX_ENTER(&conn->conn_data_lock);
            for (i=0; i<RX_MAXCALLS; i++) {
                struct rx_call *tc = conn->call[i];
                if (tc && tc->state == RX_STATE_PRECALL) {
@@ -2902,6 +2903,14 @@ static void rxi_CheckReachEvent(event, conn, acall)
                    break;
                }
            }
+           if (!call)
+               /* Indicate that rxi_CheckReachEvent is no longer running by
+                * clearing the flag.  Must be atomic under conn_data_lock to
+                * avoid a new call slipping by: rxi_CheckConnReach holds
+                * conn_data_lock while checking RX_CONN_ATTACHWAIT.
+                */
+               conn->flags &= ~RX_CONN_ATTACHWAIT;
+           MUTEX_EXIT(&conn->conn_data_lock);
            MUTEX_EXIT(&conn->conn_call_lock);
        }