X-Git-Url: http://git.indexdata.com/?a=blobdiff_plain;f=util%2Ftstflock.c;h=ae4861c09c5fd309f3d079f023b5f974370294f7;hb=2d6f6f8688e1fcd5c607771a4e0008ad2498acd3;hp=28d9548335588295946726b962037e9140333932;hpb=2bf73f691756b5ccfdc981d932e23a2ac08ff284;p=idzebra-moved-to-github.git diff --git a/util/tstflock.c b/util/tstflock.c index 28d9548..ae4861c 100644 --- a/util/tstflock.c +++ b/util/tstflock.c @@ -2,13 +2,17 @@ * Copyright (C) 1995-2006, Index Data ApS * See the file LICENSE for details. * - * $Id: tstflock.c,v 1.12 2006-06-30 15:10:29 adam Exp $ + * $Id: tstflock.c,v 1.15 2006-07-05 12:33:38 adam Exp $ */ #include #include #include #include +#if HAVE_SYS_TIME_H +#include +#endif +#include #if HAVE_SYS_STAT_H #include @@ -25,6 +29,10 @@ #include +#ifdef WIN32 +#include +#endif + #if YAZ_POSIX_THREADS #include #endif @@ -41,14 +49,34 @@ static char *seqp = 0; #define NUM_THREADS 100 +#if YAZ_POSIX_THREADS +pthread_cond_t sleep_cond = PTHREAD_COND_INITIALIZER; +pthread_mutex_t sleep_mutex = PTHREAD_MUTEX_INITIALIZER; +#endif + int test_fd = 0; static void small_sleep() { #ifdef WIN32 - Sleep(50); + Sleep(2); #else - sleep(1); +#if YAZ_POSIX_THREADS + struct timespec abstime; + struct timeval now; + + gettimeofday(&now, 0); + abstime.tv_sec = now.tv_sec; + abstime.tv_nsec = 1000000 + now.tv_usec * 1000; + if (abstime.tv_nsec > 1000000000) /* 1s = 1e9 ns */ + { + abstime.tv_nsec -= 1000000000; + abstime.tv_sec++; + } + pthread_mutex_lock(&sleep_mutex); + pthread_cond_timedwait(&sleep_cond, &sleep_mutex, &abstime); + pthread_mutex_unlock(&sleep_mutex); +#endif #endif } @@ -165,12 +193,9 @@ static void tst() } } -#if 0 tst_thread(6, 0); /* read locks */ -#endif -#if 1 + tst_thread(20, 2); /* random locks */ -#endif } void fork_tst() @@ -199,7 +224,6 @@ void fork_tst() #endif } - int main(int argc, char **argv) { char logname[220]; @@ -208,7 +232,11 @@ int main(int argc, char **argv) sprintf(logname, "%.200s.log", argv[0]); yaz_log_init_file(logname); - yaz_log_time_format("%s:%!"); + /* log time + thread id (%!) */ + yaz_log_time_format("%c:%!"); + + /* ensure the flock system logs in our test */ + yaz_log_init_level(yaz_log_mask_str("flock")); zebra_flock_init();