0.8.3.1
authorDaniel Barlow <dan@telent.net>
Mon, 25 Aug 2003 21:00:00 +0000 (21:00 +0000)
committerDaniel Barlow <dan@telent.net>
Mon, 25 Aug 2003 21:00:00 +0000 (21:00 +0000)
commit2378b4fe567a8fea78b1e4915b9497d8c18ca92f
tree276594c04906d665802a4d6315435b7c6f600816
parent174feb792c8082846666e1218c58d5b0ab3b85b0
0.8.3.1

Merge stop_the_world branch: a new scheme for stopping threads
during GC, that avoids the use of ptrace and lets any of the
threads stop any of the others.  This is a summary log entry:
see branch commits for details

New C functions maybe_defer_handler and run_deferred_handler,
which encapsulate a lot of the "is it safe to run this handler
now?  no, ok, copy its siginfo somewhere safe and do it later"
cruft that's presently done ad hoc.

Stack scavenging now looks for esp in the most recent
interrupt context for each thread.  Requires that threads
save said interrupt contexts in sig_stop_for_gc_handler

Clean up some compiler warnings in gencgc.c

Lisp-level changes: approximately a reversion to old-style (or
single-threaded) GC.  Haven't actually added the gc hooks back
in yet, but now there's at least a place for them to go.

Lock around SUB-GC to remove window that may allow two threads
to attempt to collect at once.

WITHOUT-INTERRUPTS around SUB-GC to protect c-level spinlocks
used in gc_{stop,start}_the_world

(C-level spinlocks are just integers manipulated by get_spinlock(),
release_spinlock().  There's no unwind-protect or anything
involved in their use, so a thread interrupted when it's
holding one of these will continue to hold it)

Remove #if 0 from around the copying of sigmask in
        undo_fake_foreign_function_call.  Replace sizeof(sigmask_t)
        with an expression involving the value of NSIG and the rash
        assumption that sigset_t is a bitmask.

Moved get_spinlock into foo-arch.h and made it static inline.
Added release_spinlock for parity

Delete irritating message from sigcont_handler

New test cases
29 files changed:
doc/internals-notes/threading-specials [new file with mode: 0644]
src/code/gc.lisp
src/code/target-thread.lisp
src/runtime/alpha-arch.c
src/runtime/alpha-arch.h
src/runtime/backtrace.c
src/runtime/gc.h
src/runtime/gencgc-internal.h
src/runtime/gencgc.c
src/runtime/hppa-arch.c
src/runtime/hppa-arch.h
src/runtime/interrupt.c
src/runtime/interrupt.h
src/runtime/linux-os.c
src/runtime/linux-os.h
src/runtime/mips-arch.c
src/runtime/mips-arch.h
src/runtime/ppc-arch.c
src/runtime/ppc-arch.h
src/runtime/runtime.c
src/runtime/sparc-arch.c
src/runtime/sparc-arch.h
src/runtime/thread.c
src/runtime/thread.h
src/runtime/x86-arch.c
src/runtime/x86-arch.h
src/runtime/x86-linux-os.c
tests/threads.impure.lisp
version.lisp-expr