Serialize access to (runtime thread) internals.
authorMatt Birkholz <puck@birchwood-abbey.net>
Tue, 18 Aug 2015 01:38:24 +0000 (18:38 -0700)
committerMatt Birkholz <puck@birchwood-abbey.net>
Thu, 26 Nov 2015 08:09:44 +0000 (01:09 -0700)
commite63a8ab3f7a139307dc215fdedfb4b4ce1bf9c2c
treecf7ed5101ea1d6a050a3c33ed8a0fde0a5e69049
parentcbbeef25cfa1a4cf49e2084be07bec15d691336b
Serialize access to (runtime thread) internals.

Multiple processors may use the thread system simultaneously, so its
procedures and timer interrupt handler must arrange to serialize.
They must lock/unlock an OS-level mutex and run without interrupts.
While the mutex is locked, they must not signal errors and may not
invoke arbitrary hooks, handlers, etc.  (The mutex is not recursive.)

Inside the mutex's atomic sections a LOCKED? flag is set.  Asserts
check that the thread system is locked when necessary.

The channel-close and process-delete primitives are called inside the
thread system's atomic deregistration operations to ensure that the
timer interrupt or wait-for-io (i.e. test-select-registry called on
another processor) do not use the invalid descriptors.
src/runtime/intrpt.scm
src/runtime/io.scm
src/runtime/process.scm
src/runtime/runtime.pkg
src/runtime/thread.scm