mirror of
https://github.com/fluencelabs/musl
synced 2025-06-30 23:21:56 +00:00
initial check-in, version 0.5.0
This commit is contained in:
26
src/thread/pthread_cond_timedwait.c
Normal file
26
src/thread/pthread_cond_timedwait.c
Normal file
@ -0,0 +1,26 @@
|
||||
#include "pthread_impl.h"
|
||||
|
||||
static void relock(void *m)
|
||||
{
|
||||
pthread_mutex_lock(m);
|
||||
}
|
||||
|
||||
int pthread_cond_timedwait(pthread_cond_t *c, pthread_mutex_t *m, const struct timespec *ts)
|
||||
{
|
||||
int r, e=0;
|
||||
CANCELPT(0);
|
||||
|
||||
pthread_cleanup_push(relock, m);
|
||||
c->__block = 1;
|
||||
if ((r=pthread_mutex_unlock(m))) return r;
|
||||
|
||||
CANCELPT(1);
|
||||
e = __timedwait(&c->__block, 1, CLOCK_REALTIME, ts, 0);
|
||||
CANCELPT(0);
|
||||
|
||||
pthread_cleanup_pop(0);
|
||||
if ((r=pthread_mutex_lock(m))) return r;
|
||||
|
||||
CANCELPT(0);
|
||||
return e;
|
||||
}
|
Reference in New Issue
Block a user