Commit [dd54f9] Maximize Restore History

Use safepoints for INTERRUPT-THREAD

* In INTERRUPT-THREAD, stop threads using safepoints instead of
signals.

* Currently not used by default. Users need to set feature
SB-THRUPTION to enable this code. SB-THRUPTION should only be set
when SB-SAFEPOINT is also enabled.

* This feature should ultimately be rolled into SB-SAFEPOINT, but
remains as a separate build option until both versions are equally
well-tested, and until other avoidable uses of signals have also
been replaced by safepoints.

* On the term "thruption": Earlier work on this feature sometimes
used "interrupt" to refer to INTERRUPT-THREAD, causing confusion
with the traditional meaning of "interrupt" as POSIX signal or WIN32
exception. To avoid such confusion, the runtime now refers to
INTERRUPT-THREAD as a "thruption", short for th(read) (inter)ruption.

* SIGPIPE is not used for threads running Lisp code, but a low-level
handler for SIGPIPE still exists which arranges for threads running
FFI code (in particular, threads blocked in poll, select,
futex_wait) to be interrupted.

* OS support: Minor changes to signal handling required, currently
implemented for Linux and Solaris.

Credits: This is a POSIX backport of Windows threading changes by
Anton Kovalenko and Dmitry Kalyanov.

David Lichteblau David Lichteblau 2011-06-17

changed src/code/cold-init.lisp
changed src/code/early-impl.lisp
changed src/code/signal.lisp
changed src/code/target-signal.lisp
changed src/code/target-thread.lisp
changed src/code/toplevel.lisp
changed src/compiler/generic/parms.lisp
changed src/runtime/interrupt.c
changed src/runtime/interrupt.h
changed src/runtime/linux-os.c
changed src/runtime/safepoint.c
changed src/runtime/sunos-os.c
changed src/runtime/thread.c
changed src/runtime/thread.h
changed tests/kill-non-lisp-thread.impure.lisp
changed package-data-list.lisp-expr
src/code/cold-init.lisp Diff Switch to side-by-side view
Loading...
src/code/early-impl.lisp Diff Switch to side-by-side view
Loading...
src/code/signal.lisp Diff Switch to side-by-side view
Loading...
src/code/target-signal.lisp Diff Switch to side-by-side view
Loading...
src/code/target-thread.lisp Diff Switch to side-by-side view
Loading...
src/code/toplevel.lisp Diff Switch to side-by-side view
Loading...
src/compiler/generic/parms.lisp Diff Switch to side-by-side view
Loading...
src/runtime/interrupt.c Diff Switch to side-by-side view
Loading...
src/runtime/interrupt.h Diff Switch to side-by-side view
Loading...
src/runtime/linux-os.c Diff Switch to side-by-side view
Loading...
src/runtime/safepoint.c Diff Switch to side-by-side view
Loading...
src/runtime/sunos-os.c Diff Switch to side-by-side view
Loading...
src/runtime/thread.c Diff Switch to side-by-side view
Loading...
src/runtime/thread.h Diff Switch to side-by-side view
Loading...
tests/kill-non-lisp-thread.impure.lisp Diff Switch to side-by-side view
Loading...
package-data-list.lisp-expr Diff Switch to side-by-side view
Loading...