From: Nikodemus S. <de...@us...> - 2011-12-30 23:42:47
|
The branch "master" has been updated in SBCL: via 568d94164d0cf7bb6edaa27554e6e3a0f003434e (commit) from f73e459ca24cb3a6496ec16196b2ff69bef72ea2 (commit) - Log ----------------------------------------------------------------- commit 568d94164d0cf7bb6edaa27554e6e3a0f003434e Author: Nikodemus Siivola <nik...@ra...> Date: Wed Dec 7 11:26:45 2011 +0200 runtime: handle KERN_ABORTED in the darwin semaphore implementation Analogous to EINTR. --- src/runtime/darwin-os.c | 10 +++++++++- 1 files changed, 9 insertions(+), 1 deletions(-) diff --git a/src/runtime/darwin-os.c b/src/runtime/darwin-os.c index df53e98..568bbc7 100644 --- a/src/runtime/darwin-os.c +++ b/src/runtime/darwin-os.c @@ -193,11 +193,19 @@ os_sem_wait(os_sem_t *sem, char *what) switch (ret) { case KERN_SUCCESS: return; + /* It is unclear just when we can get this, but a sufficiently + * long wait seems to do that, at least sometimes. + * + * However, a wait that long is definitely abnormal for the + * GC, so we complain before retrying. + */ case KERN_OPERATION_TIMED_OUT: fprintf(stderr, "%s: os_sem_wait(%p): %s", what, sem, strerror(errno)); + /* This is analogous to POSIX EINTR. */ + case KERN_ABORTED: goto restart; default: - lose("%s: os_sem_wait(%p): %s", what, sem, strerror(errno)); + lose("%s: os_sem_wait(%p): %lu, %s", what, sem, ret, strerror(errno)); } } ----------------------------------------------------------------------- hooks/post-receive -- SBCL |