Hi all,
On Sun, Oct 23, 2011 at 8:05 PM, James Lawrence <llmjjmll@gmail.com> wrote:I don't think we should wish that. It's inconsistent not only with
> (defun test-cleanup ()
> (let* ((cleanedp nil)
> (thread (threads:make-thread
> (lambda ()
> (unwind-protect (sleep 999)
> (setf cleanedp t))))))
> (sleep 0.5)
> (threads:destroy-thread thread)
> (sleep 0.5)
> cleanedp))
>
> (test-cleanup)
>
> ABCL-1.0.0 and ABCL-0.27.0 return NIL.
>
> Other implementations I tested all return T -- Allegro, Clozure,
> LispWorks, SBCL (changing "threads" to "bordeaux-threads").
>
> Of course this isn't a bug since ABCL is free to do what it wishes.
> Does ABCL wish that?
other Lisp implementations, but with Java thread semantics as well.
The problems are two: first, that destroy-thread doesn't really
destroy the thread, it just sets a flag, so the sleep is not aborted
(when it ends, the next form is not evaluated and the thread just
terminates); second, that sleep swallows the ThreadInterrupted
exception anyway, so even if it were interrupted, the thread would
then continue normally.
I think thread-destroy should be reimplemented to call
Thread.interrupt() and that we should properly handle
InterruptedException as a Lisp condition.
_______________________________________________
armedbear-devel mailing list
armedbear-devel@common-lisp.net
http://lists.common-lisp.net/cgi-bin/mailman/listinfo/armedbear-devel