Add test for deadlock

dev
Stella Lau 2017-08-02 11:27:50 -07:00
parent 73ba58955f
commit 1e366f9dea
1 changed files with 25 additions and 0 deletions

View File

@ -2,6 +2,7 @@
#include "threading.h"
#include <stddef.h>
#include <stdio.h>
#include <unistd.h>
#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");