4 #include <sys/kernel.h>
7 #include <sys/condvar.h>
9 #include <l4/dde/dde.h>
10 #include <l4/sys/types.h>
11 #include <l4/thread/thread.h>
12 #include <l4/dde/fbsd/dde.h>
13 #include <l4/dde/fbsd/bsd_dde.h>
15 l4_ssize_t l4libc_heapsize = 1*1024*1024;
17 static struct mtx mtx1;
20 static void cond(void *data) {
23 printf("%d: entered\n", (int) data);
24 bsd_dde_prepare_thread("cond");
27 res = cv_timedwait(&cv1, &mtx1, hz/10);
29 printf("%d: %s\n", (int) data, (res?"timeout":"success"));
32 int main(int argc, char **argv) {
36 printf("cold=%d\n", cold);
38 mtx_init(&mtx1, "test mutex", "test", MTX_DEF);
39 cv_init(&cv1, "test condvar");
41 printf("----------------------------------------\n");
43 printf("wait for timeout\n");
44 l4thread_create(cond, (void*) 1, L4THREAD_CREATE_ASYNC);
47 printf("----------------------------------------\n");
49 printf("calling signal too early\n");
51 l4thread_create(cond, (void*) 2, L4THREAD_CREATE_ASYNC);
54 printf("----------------------------------------\n");
56 printf("calling broadcast too early\n");
58 l4thread_create(cond, (void*) 3, L4THREAD_CREATE_ASYNC);
61 printf("----------------------------------------\n");
63 printf("waking up one of two threads by signal\n");
64 l4thread_create(cond, (void*) 4, L4THREAD_CREATE_ASYNC);
65 l4thread_create(cond, (void*) 5, L4THREAD_CREATE_ASYNC);
70 printf("----------------------------------------\n");
72 printf("waking up two threads by signal\n");
73 l4thread_create(cond, (void*) 6, L4THREAD_CREATE_ASYNC);
74 l4thread_create(cond, (void*) 7, L4THREAD_CREATE_ASYNC);
81 printf("----------------------------------------\n");
83 printf("waking up two threads by broadcast\n");
84 l4thread_create(cond, (void*) 8, L4THREAD_CREATE_ASYNC);
85 l4thread_create(cond, (void*) 9, L4THREAD_CREATE_ASYNC);
90 printf("----------------------------------------\n");
92 l4thread_sleep_forever();