mirror of https://git.musl-libc.org/git/musl
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
16 lines
378 B
16 lines
378 B
|
15 years ago
|
#include "pthread_impl.h"
|
||
|
|
|
||
|
|
int pthread_mutex_timedlock(pthread_mutex_t *m, const struct timespec *at)
|
||
|
|
{
|
||
|
|
int r, w=0;
|
||
|
|
while ((r=pthread_mutex_trylock(m)) == EBUSY) {
|
||
|
|
if (!w) a_inc(&m->__waiters), w++;
|
||
|
|
if (__timedwait(&m->__lock, 1, CLOCK_REALTIME, at, 0) == ETIMEDOUT) {
|
||
|
|
if (w) a_dec(&m->__waiters);
|
||
|
|
return ETIMEDOUT;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
if (w) a_dec(&m->__waiters);
|
||
|
|
return r;
|
||
|
|
}
|