Allow libc's version of sem_trywait() to work for non-pshared mutexes.

This commit is contained in:
deischen 2004-02-04 15:37:48 +00:00
parent d769a0fd0e
commit 08158a6ba7

View File

@ -289,17 +289,32 @@ __sem_wait(sem_t *sem)
if (sem_check_validity(sem) != 0)
return (-1);
return (ksem_wait((*sem)->semid));
return (ksem_wait((*sem)->semid));
}
int
__sem_trywait(sem_t *sem)
{
int retval;
if (sem_check_validity(sem) != 0)
return (-1);
return (ksem_trywait((*sem)->semid));
if ((*sem)->syssem != 0)
retval = ksem_trywait((*sem)->semid);
else {
_pthread_mutex_lock(&(*sem)->lock);
if ((*sem)->count != 0) {
(*sem)->count--;
retval = 0;
} else {
errno = EAGAIN;
retval = -1;
}
(*sem)->count--;
_pthread_mutex_unlock(&(*sem)->lock);
}
return (retval);
}
int