diff --git a/tests/poolTests.c b/tests/poolTests.c index 09e6d6ad..d5c37aee 100644 --- a/tests/poolTests.c +++ b/tests/poolTests.c @@ -2,6 +2,7 @@ #include "threading.h" #include #include +#include #define ASSERT_TRUE(p) \ do { \ @@ -50,6 +51,26 @@ int testOrder(size_t numThreads, size_t queueSize) { return 0; } +void waitFn(void *opaque) { + (void)opaque; + usleep(100); +} + +/* Tests for deadlock */ +int testWait(size_t numThreads, size_t queueSize) { + struct data data; + POOL_ctx *ctx = POOL_create(numThreads, queueSize); + ASSERT_TRUE(ctx); + { + size_t i; + for (i = 0; i < 16; ++i) { + POOL_add(ctx, &waitFn, &data); + } + } + POOL_free(ctx); + return 0; +} + int main(int argc, const char **argv) { size_t numThreads; for (numThreads = 1; numThreads <= 4; ++numThreads) { @@ -59,6 +80,10 @@ int main(int argc, const char **argv) { printf("FAIL: testOrder\n"); return 1; } + if (testWait(numThreads, queueSize)) { + printf("FAIL: testWait\n"); + return 1; + } } } printf("PASS: testOrder\n");