diff --git a/bin/tests/task_test.c b/bin/tests/task_test.c index 866767159e..f48bd97b9a 100644 --- a/bin/tests/task_test.c +++ b/bin/tests/task_test.c @@ -42,6 +42,7 @@ main(int argc, char *argv[]) { mem_context_t mctx = NULL; task_manager_t manager = NULL; task_t t1 = NULL, t2 = NULL; + task_t t3 = NULL, t4 = NULL; generic_event_t event; unsigned int workers; @@ -57,27 +58,45 @@ main(int argc, char *argv[]) { INSIST(task_create(manager, "1", my_shutdown, 0, &t1)); INSIST(task_create(manager, "2", my_shutdown, 0, &t2)); - event = event_get(mctx, 1, my_callback, sizeof *event); - task_send_event(t1, event); - event = event_get(mctx, 1, my_callback, sizeof *event); - task_send_event(t2, event); - event = event_get(mctx, 1, my_callback, sizeof *event); - task_send_event(t1, event); - event = event_get(mctx, 1, my_callback, sizeof *event); - task_send_event(t2, event); - event = event_get(mctx, 1, my_callback, sizeof *event); - task_send_event(t1, event); - event = event_get(mctx, 1, my_callback, sizeof *event); - task_send_event(t2, event); - event = event_get(mctx, 1, my_callback, sizeof *event); - task_send_event(t1, event); - event = event_get(mctx, 1, my_callback, sizeof *event); - task_send_event(t2, event); + INSIST(task_create(manager, "3", my_shutdown, 0, &t3)); + INSIST(task_create(manager, "4", my_shutdown, 0, &t4)); + + event = event_get(mctx, 1, my_callback, sizeof *event); + task_send_event(t1, event); + event = event_get(mctx, 1, my_callback, sizeof *event); + task_send_event(t1, event); + event = event_get(mctx, 1, my_callback, sizeof *event); + task_send_event(t1, event); + event = event_get(mctx, 1, my_callback, sizeof *event); + task_send_event(t1, event); + event = event_get(mctx, 1, my_callback, sizeof *event); + task_send_event(t1, event); + event = event_get(mctx, 1, my_callback, sizeof *event); + task_send_event(t1, event); + event = event_get(mctx, 1, my_callback, sizeof *event); + task_send_event(t1, event); + event = event_get(mctx, 1, my_callback, sizeof *event); + task_send_event(t1, event); + event = event_get(mctx, 1, my_callback, sizeof *event); + task_send_event(t1, event); + event = event_get(mctx, 1, my_callback, sizeof *event); + task_send_event(t2, event); + event = event_get(mctx, 1, my_callback, sizeof *event); + task_send_event(t3, event); + event = event_get(mctx, 1, my_callback, sizeof *event); + task_send_event(t4, event); + event = event_get(mctx, 1, my_callback, sizeof *event); + task_send_event(t2, event); + event = event_get(mctx, 1, my_callback, sizeof *event); + task_send_event(t3, event); + event = event_get(mctx, 1, my_callback, sizeof *event); + task_send_event(t4, event); - task_shutdown(t1); - task_shutdown(t2); task_detach(&t1); task_detach(&t2); + task_detach(&t3); + task_detach(&t4); + printf("destroy\n"); task_manager_destroy(&manager); printf("destroyed\n"); diff --git a/lib/isc/include/isc/task.h b/lib/isc/include/isc/task.h index c787ec299e..c3feb549e1 100644 --- a/lib/isc/include/isc/task.h +++ b/lib/isc/include/isc/task.h @@ -57,6 +57,7 @@ void * event_get(mem_context_t, size_t); void event_put(void *); + /*** *** Tasks. ***/ diff --git a/lib/isc/pthreads/include/isc/condition.h b/lib/isc/pthreads/include/isc/condition.h index e0b1560506..1d8832d10c 100644 --- a/lib/isc/pthreads/include/isc/condition.h +++ b/lib/isc/pthreads/include/isc/condition.h @@ -22,7 +22,7 @@ typedef pthread_cond_t os_condition_t; #else -Error! Condition variables are not meaningful for a non-threaded program. +#error Condition variables are not meaningful for a non-threaded program. #endif diff --git a/lib/isc/pthreads/include/isc/thread.h b/lib/isc/pthreads/include/isc/thread.h index 97ee37d9c0..3afca332f3 100644 --- a/lib/isc/pthreads/include/isc/thread.h +++ b/lib/isc/pthreads/include/isc/thread.h @@ -14,6 +14,10 @@ typedef pthread_t os_thread_t; == 0) #define os_thread_detach(t) INSIST(pthread_detach((t)) == 0) +#else + +#error Threads are not meaningful for a non-threaded program. + #endif #endif /* THREAD_H */ diff --git a/lib/isc/task.c b/lib/isc/task.c index 8bf849c430..cc3fec0105 100644 --- a/lib/isc/task.c +++ b/lib/isc/task.c @@ -11,6 +11,11 @@ #define VALID_TASK(t) ((t) != NULL && \ (t)->magic == TASK_MAGIC) +/* + * We use macros instead of calling the os_ routines + * directly because the capital letters make the + * locking stand out. + */ #define LOCK(lp) os_mutex_lock((lp)) #define UNLOCK(lp) os_mutex_unlock((lp)) #define WAIT(cvp, lp) os_condition_wait((cvp), (lp))