X-Git-Url: http://git.indexdata.com/?a=blobdiff_plain;f=util%2Ftstflock.c;h=4abcdbf9d2ccb84a5ac8cd16a21b62f4b5484d3d;hb=11edef8271df7f3598f94373720aea3a5b6b3ad5;hp=d17c0102498cab39497b4510fbddbc3c8307db76;hpb=48faacdb311bbc6964f1478be2a8802d7160b000;p=idzebra-moved-to-github.git diff --git a/util/tstflock.c b/util/tstflock.c index d17c010..4abcdbf 100644 --- a/util/tstflock.c +++ b/util/tstflock.c @@ -2,13 +2,15 @@ * Copyright (C) 1995-2006, Index Data ApS * See the file LICENSE for details. * - * $Id: tstflock.c,v 1.11 2006-06-30 14:01:22 adam Exp $ + * $Id: tstflock.c,v 1.13 2006-07-03 21:19:13 adam Exp $ */ #include #include #include #include +#include +#include #if HAVE_SYS_STAT_H #include @@ -41,6 +43,11 @@ 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() @@ -48,7 +55,22 @@ static void small_sleep() #ifdef WIN32 Sleep(50); #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 } @@ -147,15 +169,13 @@ static void tst_thread(int num, int write_flag) for (i = 0; i < num; i++) YAZ_CHECK(id[i] == 123); *seqp++ = '\0'; + yaz_log(YLOG_LOG, "tst_thread(%d,%d) returns seq=%s", + num, write_flag, seq); } static void tst() { tst_thread(4, 1); /* write locks */ - yaz_log(YLOG_LOG, "seq=%s", seq); -#if 0 - printf("seq=%s\n", seq); -#endif if (1) { int i = 0; @@ -169,11 +189,9 @@ static void tst() #if 0 tst_thread(6, 0); /* read locks */ - printf("seq=%s\n", seq); #endif -#if 0 +#if 1 tst_thread(20, 2); /* random locks */ - printf("seq=%s\n", seq); #endif } @@ -189,7 +207,7 @@ void fork_tst() if (!pid[i]) { tst(); - return; + exit(0); } } for (i = 0; i<2; i++) @@ -219,8 +237,9 @@ int main(int argc, char **argv) test_fd = open("tstflock.out", (O_BINARY|O_CREAT|O_RDWR), 0666); YAZ_CHECK(test_fd != -1); if (test_fd != -1) + { fork_tst(); - + } YAZ_CHECK_TERM; }