]> git.michaelhowe.org Git - packages/o/openafs.git/commitdiff
DEVEL15-avoid-blocking-with-connhashtable-lock-in-reapconnections-20090307
authorJeffrey Altman <jaltman@your-file-system.com>
Sat, 7 Mar 2009 14:10:43 +0000 (14:10 +0000)
committerDerrick Brashear <shadow@dementia.org>
Sat, 7 Mar 2009 14:10:43 +0000 (14:10 +0000)
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

(cherry picked from commit 581fd18bd9c3fe8e07169c60a7cde9e72e8af89c)

src/rx/rx.c

index f354f12a1cf1d47c96d4251209a43b814090ee14..36b0aef51fc30358a18c32eb0ca2adcda3c10591 100644 (file)
@@ -6068,8 +6068,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 */