summaryrefslogtreecommitdiff
path: root/src/thread/pthread_rwlock_tryrdlock.c
blob: f860ec7163798ac34b5180f657cb9f4627285c86 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
#include "pthread_impl.h"

int pthread_rwlock_tryrdlock(pthread_rwlock_t *rw)
{
	a_inc(&rw->_rw_readers);
	if (rw->_rw_wrlock) {
		a_dec(&rw->_rw_readers);
		if (rw->_rw_waiters && !rw->_rw_readers)
			__wake(&rw->_rw_readers, 1, 0);
		return EBUSY;
	}
	return 0;
}