X-Git-Url: http://git.indexdata.com/?p=yaz-moved-to-github.git;a=blobdiff_plain;f=test%2Ftest_mutex.c;h=0a7798f5c0923963fef66b427f95451d17ced978;hp=52853b14cad0e17c0fd13f3b6f7eac5eb0126cb4;hb=33d0d214a9219e190e15779b4e4f5e31fd7946be;hpb=a60cfb6333496199c7c1d52d67ab8a3835597b48 diff --git a/test/test_mutex.c b/test/test_mutex.c index 52853b1..0a7798f 100644 --- a/test/test_mutex.c +++ b/test/test_mutex.c @@ -1,12 +1,16 @@ /* This file is part of the YAZ toolkit. - * Copyright (C) 1995-2010 Index Data + * Copyright (C) 1995-2013 Index Data * See the file LICENSE for details. */ +#if HAVE_CONFIG_H +#include +#endif #include #include #include +#include #if HAVE_SYS_TIME_H #include #endif @@ -53,30 +57,61 @@ static void tst_cond(void) return; yaz_cond_create(&c); - YAZ_CHECK(c); - if (!c) - return; + if (c) + { + r = yaz_gettimeofday(&abstime); + YAZ_CHECK_EQ(r, 0); - r = yaz_gettimeofday(&abstime); - YAZ_CHECK_EQ(r, 0); - - abstime.tv_sec += 1; /* wait 1 second */ - - r = yaz_cond_wait(c, p, &abstime); - YAZ_CHECK(r != 0); + abstime.tv_sec += 1; /* wait 1 second */ + r = yaz_cond_wait(c, p, &abstime); + YAZ_CHECK(r != 0); + + } yaz_cond_destroy(&c); YAZ_CHECK(c == 0); yaz_mutex_destroy(&p); YAZ_CHECK(p == 0); } +static void *my_handler(void *arg) +{ + int *mydata = (int*) arg; + (*mydata)++; + return mydata; +} + +static void tst_create_thread(void) +{ + void *return_data; + int mydata = 42; + yaz_thread_t t[2]; + + t[0] = yaz_thread_create(my_handler, &mydata); + YAZ_CHECK(t[0]); + t[1] = yaz_thread_create(my_handler, &mydata); + YAZ_CHECK(t[1]); + + return_data = 0; + yaz_thread_join(&t[0], &return_data); + YAZ_CHECK(!t[0]); + YAZ_CHECK(return_data == &mydata); + + return_data = 0; + yaz_thread_join(&t[1], &return_data); + YAZ_CHECK(!t[1]); + YAZ_CHECK(return_data == &mydata); + + YAZ_CHECK_EQ(mydata, 44); +} + int main (int argc, char **argv) { YAZ_CHECK_INIT(argc, argv); YAZ_CHECK_LOG(); tst_mutex(); tst_cond(); + tst_create_thread(); YAZ_CHECK_TERM; }