Add yaz_thread_{create,join,detach}
[yaz-moved-to-github.git] / test / test_mutex.c
index 52853b1..6a0b9f1 100644 (file)
@@ -7,6 +7,7 @@
 #include <stdio.h>
 
 #include <yaz/mutex.h>
+#include <yaz/thread_create.h>
 #if HAVE_SYS_TIME_H
 #include <sys/time.h>
 #endif
@@ -71,12 +72,44 @@ static void tst_cond(void)
     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;
 }