1*c9945492SAndroid Build Coastguard Worker #include <semaphore.h> 2*c9945492SAndroid Build Coastguard Worker #include <limits.h> 3*c9945492SAndroid Build Coastguard Worker #include "pthread_impl.h" 4*c9945492SAndroid Build Coastguard Worker sem_trywait(sem_t * sem)5*c9945492SAndroid Build Coastguard Workerint sem_trywait(sem_t *sem) 6*c9945492SAndroid Build Coastguard Worker { 7*c9945492SAndroid Build Coastguard Worker int val; 8*c9945492SAndroid Build Coastguard Worker while ((val=sem->__val[0]) & SEM_VALUE_MAX) { 9*c9945492SAndroid Build Coastguard Worker if (a_cas(sem->__val, val, val-1)==val) return 0; 10*c9945492SAndroid Build Coastguard Worker } 11*c9945492SAndroid Build Coastguard Worker errno = EAGAIN; 12*c9945492SAndroid Build Coastguard Worker return -1; 13*c9945492SAndroid Build Coastguard Worker } 14