From: Nickolai Zeldovich Date: Thu, 22 Aug 2002 03:03:41 +0000 (+0000) Subject: Clear the RX_CONN_ATTACHWAIT flag when an asymmetric client's calls X-Git-Tag: openafs-stable-1_2_7~36 X-Git-Url: https://git.michaelhowe.org/gitweb/?a=commitdiff_plain;h=318d70b00e243c2a14eaf3b7ab2d9b43f7770293;p=packages%2Fo%2Fopenafs.git Clear the RX_CONN_ATTACHWAIT flag when an asymmetric client's calls time out; otherwise, the client could be locked out until the conn is recycled. (cherry picked from commit 7c20aa608273c5af8829183b325acbb2c356e038) --- diff --git a/src/rx/rx.c b/src/rx/rx.c index 9058d7d8d..4599a6017 100644 --- a/src/rx/rx.c +++ b/src/rx/rx.c @@ -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; icall[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); }