ubik-pause-collapsing-20020624
[openafs.git] / src / ubik / disk.c
index a41aef4..15fb858 100644 (file)
@@ -820,6 +820,19 @@ udisk_end(atrans)
     struct ubik_trans *atrans; {
     struct ubik_dbase *dbase;
 
+#if defined(UBIK_PAUSE)
+       /* Another thread is trying to lock this transaction.
+        * That can only be an RPC doing SDISK_Lock.
+        * Unlock the transaction, 'cause otherwise the other
+        * thread will never wake up.  Don't free it because
+        * the caller will do that already.
+        */
+    if (atrans->flags & TRSETLOCK) {
+       atrans->flags |= TRSTALE;
+       ulock_relLock(atrans);
+       return;
+    }
+#endif /* UBIK_PAUSE */
     if (!(atrans->flags & TRDONE)) udisk_abort(atrans);
     dbase = atrans->dbase;