#include <sys/semaphore.h>
#include <sys/errno.h>
#include <sys/debug.h>
int _lwp_sema_init(lwp_sema_t *, int);
int _lwp_sema_wait(lwp_sema_t *);
int _lwp_sema_trywait(lwp_sema_t *);
int _lwp_sema_post(lwp_sema_t *);
void
ksema_init(ksema_t *sem, uint32_t val,
char *name, ksema_type_t st, void *arg)
{
(void) _lwp_sema_init(sem, val);
}
void
ksema_destroy(ksema_t *sem)
{
}
void
sema_p(ksema_t *sem)
{
int rv;
do {
rv = _lwp_sema_wait(sem);
} while (rv == EINTR);
}
void
sema_v(ksema_t *sem)
{
(void) _lwp_sema_post(sem);
}
int
sema_p_sig(ksema_t *sem)
{
int rv;
rv = _lwp_sema_wait(sem);
switch (rv) {
case 0:
break;
case EINTR:
default:
rv = 1;
break;
}
return (rv);
}
int
sema_tryp(ksema_t *sem)
{
int rv;
rv = _lwp_sema_trywait(sem);
switch (rv) {
case 0:
rv = 1;
break;
case EBUSY:
default:
rv = 0;
break;
}
return (rv);
}