From: Kern Sibbald Date: Wed, 5 Nov 2008 14:33:44 +0000 (+0000) Subject: Tweak rwlock_test X-Git-Tag: Release-2.4.4~36 X-Git-Url: https://git.sur5r.net/?a=commitdiff_plain;h=9ba732309c39f5a8b978067145e75c37c58d2437;p=bacula%2Fbacula Tweak rwlock_test git-svn-id: https://bacula.svn.sourceforge.net/svnroot/bacula/branches/Branch-2.4@7980 91ce42f0-d328-0410-95d8-f526ca767f89 --- diff --git a/bacula/src/lib/rwlock.c b/bacula/src/lib/rwlock.c index a9020abe94..a57879e719 100644 --- a/bacula/src/lib/rwlock.c +++ b/bacula/src/lib/rwlock.c @@ -318,7 +318,7 @@ int rwl_writeunlock(brwlock_t *rwl) #ifdef TEST_RWLOCK -#define THREADS 200 +#define THREADS 300 #define DATASIZE 15 #define ITERATIONS 1000000 @@ -362,14 +362,12 @@ 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) { +// 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)); + printf("Write lock failed. ERR=%s\n", be.bstrerror(status)); + exit(1); } data[element].data = self->thread_num; data[element].writes++; @@ -377,7 +375,8 @@ void *thread_routine(void *arg) status = rwl_writelock(&data[element].lock); if (status != 0) { berrno be; - Emsg1(M_ABORT, 0, _("Write lock failed. ERR=%s\n"), be.bstrerror(status)); + printf("Write lock failed. ERR=%s\n", be.bstrerror(status)); + exit(1); } data[element].data = self->thread_num; data[element].writes++; @@ -385,14 +384,17 @@ void *thread_routine(void *arg) status = rwl_writeunlock(&data[element].lock); if (status != 0) { berrno be; - Emsg1(M_ABORT, 0, _("Write unlock failed. ERR=%s\n"), be.bstrerror(status)); + printf("Write unlock failed. ERR=%s\n", be.bstrerror(status)); + exit(1); } status = rwl_writeunlock(&data[element].lock); if (status != 0) { berrno be; - Emsg1(M_ABORT, 0, _("Write unlock failed. ERR=%s\n"), be.bstrerror(status)); + printf("Write unlock failed. ERR=%s\n", be.bstrerror(status)); + exit(1); } +#ifdef xxx } else { /* * Look at the current data element to see whether @@ -402,7 +404,8 @@ void *thread_routine(void *arg) status = rwl_readlock(&data[element].lock); if (status != 0) { berrno be; - Emsg1(M_ABORT, 0, _("Read lock failed. ERR=%s\n"), be.bstrerror(status)); + printf("Read lock failed. ERR=%s\n", be.bstrerror(status)); + exit(1); } self->reads++; if (data[element].data == self->thread_num) @@ -410,9 +413,11 @@ void *thread_routine(void *arg) status = rwl_readunlock(&data[element].lock); if (status != 0) { berrno be; - Emsg1(M_ABORT, 0, _("Read unlock failed. ERR=%s\n"), be.bstrerror(status)); + printf("Read unlock failed. ERR=%s\n", be.bstrerror(status)); + exit(1); } } +#endif element++; if (element >= DATASIZE) { element = 0; @@ -452,7 +457,8 @@ int main (int argc, char *argv[]) status = rwl_init (&data[data_count].lock); if (status != 0) { berrno be; - Emsg1(M_ABORT, 0, _("Init rwlock failed. ERR=%s\n"), be.bstrerror(status)); + printf("Init rwlock failed. ERR=%s\n", be.bstrerror(status)); + exit(1); } } @@ -463,12 +469,16 @@ int main (int argc, char *argv[]) threads[count].thread_num = count + 1; threads[count].writes = 0; threads[count].reads = 0; - threads[count].interval = rand_r (&seed) % 71; + threads[count].interval = rand_r(&seed) % 71; + if (threads[count].interval <= 0) { + threads[count].interval = 1; + } status = pthread_create (&threads[count].thread_id, NULL, thread_routine, (void*)&threads[count]); - if (status != 0) { + if (status != 0 || (int)threads[count].thread_id == 0) { berrno be; - Emsg1(M_ABORT, 0, _("Create thread failed. ERR=%s\n"), be.bstrerror(status)); + printf("Create thread failed. ERR=%s\n", be.bstrerror(status)); + exit(1); } } @@ -480,7 +490,8 @@ int main (int argc, char *argv[]) status = pthread_join (threads[count].thread_id, NULL); if (status != 0) { berrno be; - Emsg1(M_ABORT, 0, _("Join thread failed. ERR=%s\n"), be.bstrerror(status)); + printf("Join thread failed. ERR=%s\n", be.bstrerror(status)); + exit(1); } thread_writes += threads[count].writes; printf (_("%02d: interval %d, writes %d, reads %d\n"),