semaphores in the runtime
authorNikodemus Siivola <nikodemus@random-state.net>
Fri, 18 Nov 2011 20:37:22 +0000 (22:37 +0200)
committerNikodemus Siivola <nikodemus@random-state.net>
Mon, 5 Dec 2011 16:38:38 +0000 (18:38 +0200)
commit8340bf74c31b29e9552ef8f705b6e1298547c6ab
tree323591a17aa71d3e20667a51ac91ee30a5eadb97
parentbaa495b809aac936baca13b423d2b3201650e719
semaphores in the runtime

  Trivial refactorings:

  * Rename STATE_SUSPENDED STATE_STOPPED for elegance. (Spells with the same
    number of letters as STATE_RUNNING, things line up nicer.)

  * Re-express make_fixnum in terms of MAKE_FIXNUM so that we can use the
    latter to define STATE_* names in a manner acceptable to use in
    switch-statements.

  * Move Mach exception handling initialization to darwin_init from
    create_initial_thread so that current_mach_task gets initialized before
    the first thread struct is initialized.

  The Beef:

    Replace condition variables in the runtime with semaphores.

    On most platforms use sem_t, but on Darwin use semaphore_t. Hide the
    difference behind, os_sem_t, os_sem_init, os_sem_destroy, os_sem_post, and
    os_sem_wait.

    POSIX realtime semaphores are supposedly safe to use in signal handlers,
    unlike condition variables -- and experimentally at least Mach semaphores
    on Darwin are a lot less prone to problems.

    (Our pthread mutex usage isn't quite kosher either, but it's the
    pthread_cond_wait and pthread_cond_broadcast pair that seemed to be
    causing most of the trouble.)
src/compiler/generic/objdef.lisp
src/runtime/bsd-os.c
src/runtime/darwin-os.c
src/runtime/darwin-os.h
src/runtime/dynbind.c
src/runtime/interrupt.c
src/runtime/ppc-assem.S
src/runtime/print.c
src/runtime/runtime.h
src/runtime/thread.c
src/runtime/thread.h