summaryrefslogtreecommitdiffstats
path: root/test/test_sem.c
diff options
context:
space:
mode:
authorDavid Robillard <d@drobilla.net>2022-08-18 18:47:57 -0400
committerDavid Robillard <d@drobilla.net>2022-08-18 19:23:41 -0400
commit93eb717f520d68d27bfe110d48057cdd54a4a2bc (patch)
tree39be097ac1cb678e1b2df3087f6d83d78c382e52 /test/test_sem.c
parent35c7e80281ff6079b6e89dd421addd0a5f6b8b2c (diff)
downloadzix-93eb717f520d68d27bfe110d48057cdd54a4a2bc.tar.gz
zix-93eb717f520d68d27bfe110d48057cdd54a4a2bc.tar.bz2
zix-93eb717f520d68d27bfe110d48057cdd54a4a2bc.zip
Fix semaphore error handling
Note that existing code which uses zix_sem_try_wait() may still compile against this change, but be incorrect!
Diffstat (limited to 'test/test_sem.c')
-rw-r--r--test/test_sem.c19
1 files changed, 16 insertions, 3 deletions
diff --git a/test/test_sem.c b/test/test_sem.c
index 023b8ee..d43dac8 100644
--- a/test/test_sem.c
+++ b/test/test_sem.c
@@ -4,6 +4,7 @@
#undef NDEBUG
#include "zix/attributes.h"
+#include "zix/common.h"
#include "zix/sem.h"
#include "zix/thread.h"
@@ -33,13 +34,24 @@ writer(void* ZIX_UNUSED(arg))
printf("Writer starting\n");
for (unsigned i = 0; i < n_signals; ++i) {
- zix_sem_post(&sem);
+ assert(!zix_sem_post(&sem));
}
printf("Writer finished\n");
return ZIX_THREAD_RESULT;
}
+static void
+test_try_wait(void)
+{
+ assert(!zix_sem_init(&sem, 0));
+ assert(zix_sem_try_wait(&sem) == ZIX_STATUS_TIMEOUT);
+ assert(!zix_sem_post(&sem));
+ assert(!zix_sem_try_wait(&sem));
+ assert(zix_sem_try_wait(&sem) == ZIX_STATUS_TIMEOUT);
+ assert(!zix_sem_destroy(&sem));
+}
+
int
main(int argc, char** argv)
{
@@ -52,6 +64,8 @@ main(int argc, char** argv)
n_signals = (unsigned)strtol(argv[1], NULL, 10);
}
+ test_try_wait();
+
printf("Testing %u signals...\n", n_signals);
assert(!zix_sem_init(&sem, 0));
@@ -64,7 +78,6 @@ main(int argc, char** argv)
assert(!zix_thread_join(reader_thread));
assert(!zix_thread_join(writer_thread));
-
- zix_sem_destroy(&sem);
+ assert(!zix_sem_destroy(&sem));
return 0;
}