]> git.sur5r.net Git - bacula/bacula/commitdiff
Fix and tweak rwlock_test
authorKern Sibbald <kern@sibbald.com>
Wed, 5 Nov 2008 11:23:33 +0000 (11:23 +0000)
committerKern Sibbald <kern@sibbald.com>
Wed, 5 Nov 2008 11:23:33 +0000 (11:23 +0000)
git-svn-id: https://bacula.svn.sourceforge.net/svnroot/bacula/branches/Branch-2.4@7978 91ce42f0-d328-0410-95d8-f526ca767f89

bacula/src/lib/rwlock.c

index 561a80e7349a1e1ba6d1f86e52a3bebde3a7d8ca..a9020abe9447b9e4ff526c6ae03392f209486498 100644 (file)
@@ -318,7 +318,7 @@ int rwl_writeunlock(brwlock_t *rwl)
 
 #ifdef TEST_RWLOCK
 
-#define THREADS     80
+#define THREADS     200
 #define DATASIZE   15
 #define ITERATIONS 1000000
 
@@ -362,7 +362,18 @@ void *thread_routine(void *arg)
        * update operation (write lock instead of read
        * lock).
        */
+      if (self->interval <= 0) {
+         self->interval = 1;
+      }
       if ((iteration % self->interval) == 0) {
+         status = rwl_writelock(&data[element].lock);
+         if (status != 0) {
+            berrno be;
+            Emsg1(M_ABORT, 0, _("Write lock failed. ERR=%s\n"), be.bstrerror(status));
+         }
+         data[element].data = self->thread_num;
+         data[element].writes++;
+         self->writes++;
          status = rwl_writelock(&data[element].lock);
          if (status != 0) {
             berrno be;
@@ -376,6 +387,12 @@ void *thread_routine(void *arg)
             berrno be;
             Emsg1(M_ABORT, 0, _("Write unlock failed. ERR=%s\n"), be.bstrerror(status));
          }
+         status = rwl_writeunlock(&data[element].lock);
+         if (status != 0) {
+            berrno be;
+            Emsg1(M_ABORT, 0, _("Write unlock failed. ERR=%s\n"), be.bstrerror(status));
+         }
+
       } else {
          /*
           * Look at the current data element to see whether