X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=src%2Fruntime%2Fos-common.c;h=fa845bfcac1e6e49d19db5cb0fb2a6d72b73d712;hb=1d06300e09f767a38bbe6d5b38232ca334ab1913;hp=3fdf92518ad4cb3c6721e003039da0b2b3d447b8;hpb=854a7c8f6987e05b6aebe186f30b7e125693afaf;p=sbcl.git diff --git a/src/runtime/os-common.c b/src/runtime/os-common.c index 3fdf925..fa845bf 100644 --- a/src/runtime/os-common.c +++ b/src/runtime/os-common.c @@ -73,3 +73,41 @@ os_get_errno(void) { return errno; } + + +#if defined(LISP_FEATURE_SB_THREAD) && !defined(CANNOT_USE_POSIX_SEM_T) + +void +os_sem_init(os_sem_t *sem, unsigned int value) +{ + if (-1==sem_init(sem, 0, value)) + lose("os_sem_init(%p, %u): %s", sem, value, strerror(errno)); + FSHOW((stderr, "os_sem_init(%p, %u)\n", sem, value)); +} + +void +os_sem_wait(os_sem_t *sem, char *what) +{ + FSHOW((stderr, "%s: os_sem_wait(%p) ...\n", what, sem)); + while (-1 == sem_wait(sem)) + if (EINTR!=errno) + lose("%s: os_sem_wait(%p): %s", what, sem, strerror(errno)); + FSHOW((stderr, "%s: os_sem_wait(%p) => ok\n", what, sem)); +} + +void +os_sem_post(sem_t *sem, char *what) +{ + if (-1 == sem_post(sem)) + lose("%s: os_sem_post(%p): %s", what, sem, strerror(errno)); + FSHOW((stderr, "%s: os_sem_post(%p)\n", what, sem)); +} + +void +os_sem_destroy(os_sem_t *sem) +{ + if (-1==sem_destroy(sem)) + lose("os_sem_destroy(%p): %s", sem, strerror(errno)); +} + +#endif