From a287dbab235c9041a32300a9e0bb60ef41864963 Mon Sep 17 00:00:00 2001 From: David Jeannot Date: Tue, 6 Sep 2011 10:10:43 -0400 Subject: devdraw: draft cocoa support R=rsc CC=plan9port.codebot http://codereview.appspot.com/4974060 --- src/cmd/devdraw/cocoa-thread.c | 54 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 54 insertions(+) create mode 100644 src/cmd/devdraw/cocoa-thread.c (limited to 'src/cmd/devdraw/cocoa-thread.c') diff --git a/src/cmd/devdraw/cocoa-thread.c b/src/cmd/devdraw/cocoa-thread.c new file mode 100644 index 00000000..4b2443ce --- /dev/null +++ b/src/cmd/devdraw/cocoa-thread.c @@ -0,0 +1,54 @@ +#include +#include +#include "cocoa-thread.h" + +static pthread_mutex_t initlock = PTHREAD_MUTEX_INITIALIZER; + +void +qlock(QLock *q) +{ + if(q->init == 0){ + pthread_mutex_lock(&initlock); + if(q->init == 0){ + pthread_mutex_init(&q->m, nil); + q->init = 1; + } + pthread_mutex_unlock(&initlock); + } + pthread_mutex_lock(&q->m); +} + +void +qunlock(QLock *q) +{ + pthread_mutex_unlock(&q->m); +} + +static void +rinit(Rendez *r) +{ + pthread_mutex_lock(&initlock); + if(r->init == 0){ + pthread_cond_init(&r->c, nil); + r->init = 1; + } + pthread_mutex_unlock(&initlock); +} + +void +rsleep(Rendez *r) +{ + if(r->init == 0) + rinit(r); + pthread_cond_wait(&r->c, &r->l->m); +} + +int +rwakeup(Rendez *r) +{ + if(r->init == 0) + rinit(r); + pthread_cond_signal(&r->c); + + return 0; +} -- cgit v1.2.3