From 581fd18bd9c3fe8e07169c60a7cde9e72e8af89c Mon Sep 17 00:00:00 2001 From: Jeffrey Altman Date: Sat, 7 Mar 2009 14:10:23 +0000 Subject: [PATCH] avoid-blocking-with-connhashtable-lock-in-reapconnections-20090307 LICENSE BSD instead of potentially blocking waiting for a call lock, assume if the call is locked, the conn is still busy. also, don't even try to get the conn data lock if we don't need to --- src/rx/rx.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/rx/rx.c b/src/rx/rx.c index 70649e2f00..e141d63850 100644 --- a/src/rx/rx.c +++ b/src/rx/rx.c @@ -6093,8 +6093,11 @@ rxi_ReapConnections(struct rxevent *unused, void *unused1, void *unused2) for (i = 0; i < RX_MAXCALLS; i++) { call = conn->call[i]; if (call) { + int code; havecalls = 1; - MUTEX_ENTER(&call->lock); + code = MUTEX_TRYENTER(&call->lock); + if (!code) + continue; #ifdef RX_ENABLE_LOCKS result = rxi_CheckCall(call, 1); #else /* RX_ENABLE_LOCKS */