Add test for deadlock

This commit is contained in:
Stella Lau 2017-08-02 11:27:50 -07:00
parent 73ba58955f
commit 1e366f9dea

View File

@ -2,6 +2,7 @@
#include "threading.h" #include "threading.h"
#include <stddef.h> #include <stddef.h>
#include <stdio.h> #include <stdio.h>
#include <unistd.h>
#define ASSERT_TRUE(p) \ #define ASSERT_TRUE(p) \
do { \ do { \
@ -50,6 +51,26 @@ int testOrder(size_t numThreads, size_t queueSize) {
return 0; 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) { int main(int argc, const char **argv) {
size_t numThreads; size_t numThreads;
for (numThreads = 1; numThreads <= 4; ++numThreads) { for (numThreads = 1; numThreads <= 4; ++numThreads) {
@ -59,6 +80,10 @@ int main(int argc, const char **argv) {
printf("FAIL: testOrder\n"); printf("FAIL: testOrder\n");
return 1; return 1;
} }
if (testWait(numThreads, queueSize)) {
printf("FAIL: testWait\n");
return 1;
}
} }
} }
printf("PASS: testOrder\n"); printf("PASS: testOrder\n");