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 d44b116..a158d65 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 a2d6fc0..60aac96 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 eb24e9d..3eafd72 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);