From 7c20aa608273c5af8829183b325acbb2c356e038 Mon Sep 17 00:00:00 2001 From: Nickolai Zeldovich Date: Wed, 3 Apr 2002 07:20:07 +0000 Subject: [PATCH] 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. --- src/rx/rx.c | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/rx/rx.c b/src/rx/rx.c index 4c5699553..ab68dbd26 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); } -- 2.39.5