Serialize access to (runtime thread) internals.
authorMatt Birkholz <puck@birchwood-abbey.net>
Wed, 8 Jul 2015 23:48:11 +0000 (16:48 -0700)
committerMatt Birkholz <puck@birchwood-abbey.net>
Wed, 8 Jul 2015 23:48:11 +0000 (16:48 -0700)
commitdffdb139a6bf6a5aefd259213cf072d3942de5b9
tree88538e6d17b688135b4a4f8a67be5729d3fd707e
parentc3ff09f82c995ea557fcaa30531ce54f942fb798
Serialize access to (runtime thread) internals.

Multiple processors may use the thread system simultaneously, so
procedures that modify its data structures (or that just want to read
consistent data structures!) must arrange to serialize their accesses.
They must lock an OS-level mutex and unlock it when they are done, all
without-interrupts.  While the mutex is locked, they should NOT signal
errors nor invoke arbitrary hooks, handlers, etc.  Thus there should
be no need for a recursive mutex.

The nonrecursive mutex's atomic sections are implemented in uni-
processing worlds by masking all interrupts.  Inside, a LOCKED? flag
is set and cleared and asserts check that the thread system is locked
(or not!).  Allowing GC interrupts in these sections is left as an
exercise.

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