]> git.michaelhowe.org Git - packages/o/openafs.git/commitdiff
ubik: add lock initialization function
authorMarc Dionne <marc.c.dionne@gmail.com>
Thu, 20 Jan 2011 02:52:04 +0000 (21:52 -0500)
committerDerrick Brashear <shadow@dementia.org>
Sun, 6 Mar 2011 13:42:58 +0000 (05:42 -0800)
Add a new lock initialization function and call it from the
initialization sequence.  Users of the locks can assume that
they are already initialized.

Change-Id: I8e86f460cb705c8de12bac9367358c93f1423591
Reviewed-on: http://gerrit.openafs.org/4141
Tested-by: BuildBot <buildbot@rampaginggeek.com>
Reviewed-by: Derrick Brashear <shadow@dementia.org>
src/ubik/lock.c
src/ubik/ubik.c
src/ubik/ubik.p.h

index d44b1162febffa9c4efc0d6e1279d227fb0c29af..a158d65f074f4ac306f076fa76969ee8fe6cfbc7 100644 (file)
   ((((lock)->excl_locked & WRITE_LOCK) || (lock)->readers_reading) ? 0 : 1)
 
 struct Lock rwlock;
-int rwlockinit = 1;
+
+/*!
+ * \Initialize locks
+ */
+void
+ulock_Init(void)
+{
+    Lock_Init(&rwlock);
+}
 
 /*!
  * \brief Set a transaction lock.
@@ -69,12 +77,6 @@ ulock_getLock(struct ubik_trans *atrans, int atype, int await)
 {
     struct ubik_dbase *dbase = atrans->dbase;
 
-    /* On first pass, initialize the lock */
-    if (rwlockinit) {
-       Lock_Init(&rwlock);
-       rwlockinit = 0;
-    }
-
     if ((atype != LOCKREAD) && (atype != LOCKWRITE))
        return EINVAL;
 
@@ -135,9 +137,6 @@ ulock_getLock(struct ubik_trans *atrans, int atype, int await)
 void
 ulock_relLock(struct ubik_trans *atrans)
 {
-    if (rwlockinit)
-       return;
-
     if (atrans->locktype == LOCKWRITE && (atrans->flags & TRREADWRITE)) {
        ubik_print("Ubik: Internal Error: unlocking write lock with "
                   "TRREADWRITE?\n");
@@ -167,11 +166,6 @@ ulock_relLock(struct ubik_trans *atrans)
 void
 ulock_Debug(struct ubik_debug *aparm)
 {
-    if (rwlockinit) {
-       aparm->anyReadLocks = 0;
-       aparm->anyWriteLocks = 0;
-    } else {
-       aparm->anyReadLocks = rwlock.readers_reading;
-       aparm->anyWriteLocks = ((rwlock.excl_locked == WRITE_LOCK) ? 1 : 0);
-    }
+    aparm->anyReadLocks = rwlock.readers_reading;
+    aparm->anyWriteLocks = ((rwlock.excl_locked == WRITE_LOCK) ? 1 : 0);
 }
index a2d6fc0ca6b47fb8e10039425fedcd8796cd0d72..60aac9612bbd994b95ac3acec71aacf54808d1c9 100644 (file)
@@ -424,6 +424,7 @@ ubik_ServerInitCommon(afs_uint32 myHost, short myPort,
        return code;
 
     udisk_Init(ubik_nBuffers);
+    ulock_Init();
 
     ubik_callPortal = myPort;
     /* try to get an additional security object */
index eb24e9dbe52880eee2469620821e7c5e9412f4d2..3eafd72c94c68c058b542548706b25fa24679205 100644 (file)
@@ -437,6 +437,7 @@ extern int udisk_end(struct ubik_trans *atrans);
 /*\}*/
 
 /*! \name lock.c */
+extern void ulock_Init(void);
 extern int  ulock_getLock(struct ubik_trans *atrans, int atype, int await);
 extern void ulock_relLock(struct ubik_trans *atrans);
 extern void ulock_Debug(struct ubik_debug *aparm);