2 * This file is part of DDEKit.
4 * (c) 2006-2012 Bjoern Doebel <doebel@os.inf.tu-dresden.de>
5 * Christian Helmuth <ch12@os.inf.tu-dresden.de>
6 * Thomas Friebel <tf13@os.inf.tu-dresden.de>
7 * economic rights: Technische Universitaet Dresden (Germany)
9 * This file is part of TUD:OS and distributed under the terms of the
10 * GNU General Public License 2.
11 * Please see the COPYING-GPL-2 file for details.
15 * Unchecked (no BSD invariants) condition variable implementation for
16 * dde-internal use. Written from scratch.
18 #include <l4/dde/ddekit/condvar.h>
19 #include <l4/dde/ddekit/lock.h>
20 #include <l4/dde/ddekit/memory.h>
21 #include <l4/dde/ddekit/panic.h>
22 #include <l4/dde/ddekit/assert.h>
23 #include "internals.h"
25 struct ddekit_condvar {
29 ddekit_condvar_t *ddekit_condvar_init()
31 ddekit_condvar_t *c = ddekit_simple_malloc(sizeof(ddekit_condvar_t));
32 int r = pthread_cond_init(&c->cond, NULL);
38 void ddekit_condvar_wait(ddekit_condvar_t *cvp, ddekit_lock_t *mp)
40 int r = pthread_cond_wait(&cvp->cond, ddekit_lock_to_pthread(*mp));
45 int ddekit_condvar_wait_timed(ddekit_condvar_t *cvp, ddekit_lock_t *mp, int timo)
47 struct timespec abs_to = ddekit_abs_to_from_rel_ms(timo);
48 return pthread_cond_timedwait(&cvp->cond,
49 ddekit_lock_to_pthread(*mp),
54 void ddekit_condvar_signal(ddekit_condvar_t *cvp)
56 int r = pthread_cond_signal(&cvp->cond);
61 void ddekit_condvar_broadcast(ddekit_condvar_t *cvp)
63 int r = pthread_cond_broadcast(&cvp->cond);