pthread_cond_timedwait.c 483 字节
Newer Older
R
Rich Felker 已提交
1 2 3 4 5 6 7 8 9 10 11 12 13
#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);
14
	c->_c_block = 1;
R
Rich Felker 已提交
15 16 17
	if ((r=pthread_mutex_unlock(m))) return r;

	CANCELPT(1);
18
	e = __timedwait(&c->_c_block, 1, c->_c_clock, ts, 0);
R
Rich Felker 已提交
19 20 21 22 23 24 25 26
	CANCELPT(0);

	pthread_cleanup_pop(0);
	if ((r=pthread_mutex_lock(m))) return r;

	CANCELPT(0);
	return e;
}