ubik: Introduce version lock
[openafs.git] / src / ubik / ubik.c
index c73e781..bd913ec 100644 (file)
@@ -98,6 +98,8 @@ static void (*buildSecClassesProc)(void *, struct rx_securityClass ***,
 static int (*checkSecurityProc)(void *, struct rx_call *) = NULL;
 static void *securityRock = NULL;
 
+struct version_data version_globals;
+
 #define        CStampVersion       1   /* meaning set ts->version */
 
 static_inline struct rx_connection *
@@ -636,6 +638,7 @@ BeginTrans(struct ubik_dbase *dbase, afs_int32 transMode,
        DBRELE(dbase);
        return code;
     }
+    UBIK_VERSION_LOCK;
     if (readAny) {
        tt->flags |= TRREADANY;
        if (readAny > 1) {
@@ -658,12 +661,14 @@ BeginTrans(struct ubik_dbase *dbase, afs_int32 transMode,
            udisk_abort(tt);
            ContactQuorum_NoArguments(DISK_Abort, tt, 0); /* force aborts to the others */
            udisk_end(tt);
+           UBIK_VERSION_UNLOCK;
            DBRELE(dbase);
            return code;
        }
     }
 
     *transPtr = tt;
+    UBIK_VERSION_UNLOCK;
     DBRELE(dbase);
     return 0;
 }