0.8.13.65
authorDaniel Barlow <dan@telent.net>
Mon, 16 Aug 2004 18:19:14 +0000 (18:19 +0000)
committerDaniel Barlow <dan@telent.net>
Mon, 16 Aug 2004 18:19:14 +0000 (18:19 +0000)
commitd0511d2a94e7d2d346e2f4acc38ff84cd99a74b1
treee5d6f11d03cfbef93e17b8e99812018257c9359e
parent26d7f85dbf4b62207c7aae58136f8c8b9fd89a05
0.8.13.65
Fix/bandaid for some more threading problems (though
regrettably only the easy ones)

... when stopping threads for GC, if kill() fails assume this
    is because the thread died after outliving its parent so
    nothing was available to set th->state=STATE_DEAD when it
    exited.  Mark said thread dead, Ted.

    (Note: still doesn't cope with pid recycling.  In the
    unlikely-unless-malefactor-involved case that a pid
    previously used for a thread died after its parent and now
    belongs to an unrelated process which the current user has
    permission to kill it, it will probably die in the next
    GC.  Exploits on a postcasrd to the usual address, please)

... interrupt_thread() now checks that the thread is one we
    know about (instead of just some random other process)
    and refuses to kill if it's not.  INTERRUPT-THREAD now
    catches this and other errors from kill() and signals a
    more useful condition than the provious "unexpected system
    call failure"

        ... only the parent of a thread can identify whether it is a
            zombie, which it should usually do when it gets a
            SIG_THREAD_EXIT.  It's possible that this signal may go
            missing if delivered during pseudoatomic or similar, so
            for the sake of being able to GC we ask each thread to
            check its children again in the stop_for_gc_handler before
            going to sleep

Thread documentation update based on the LSM lightning talk
doc/manual/beyond-ansi.texinfo
src/code/debug.lisp
src/code/target-thread.lisp
src/runtime/interrupt.c
src/runtime/thread.c
version.lisp-expr