[armedbear-devel] [FIXED?] Bug: Attempt to GO to a tag whose extent has ended quits ABCL

logicmoo at gmail.com logicmoo at gmail.com
Mon Sep 21 18:13:41 UTC 2009


Here was a solution I used.

What I did in my local copy of ABCL, was instead of Keeping a dictionary of javaThread->LisptThread,
I made LispThread implement UncaughtExcetionHandler interface.

 public void uncaughtException(Thread arg0, Throwable arg1) {
 try {
    error(new LispError(getMessage(arg1)));
  } catch (Throwable e) {
   e.printStackTrace();
   throw new RuntimeException(arg1);
  }
  
 }

And used   (LispThread)somejavaThread.getUncaughtExcetionHandler();  to retreive the LispThread 

This also catches the wild GOs


----- Original Message ----- 
From: "Mark Evenson" <evenson at panix.com>
To: <armedbear-devel at common-lisp.net>
Sent: Monday, September 21, 2009 4:58 AM
Subject: Re: [armedbear-devel] [FIXED?] Bug: Attempt to GO to a tag whose extent has ended quits ABCL


> On 9/20/09 1:16 PM, Tobias C. Rittweiler wrote:
>> Mark Evenson<evenson at panix.com>  writes:
>>
>>> On 9/18/09 1:36 PM, Mark Evenson wrote:
>>>
>>>> Filed as [bug ticket #63][63].  Thanks for the report.
>>>>
>>>> [63]: http://trac.common-lisp.net/armedbear/ticket/63
> 
>> This is not enough. You also have to add a catch to LispThread.
>>
>>    (threads:make-thread #'(lambda ()
>>                             (let ((f nil))
>>                               (tagbody (setf f (lambda () (go foo))) foo)
>>                               (funcall f)))
>>                         :name "foof")
>>
> 
> Unfortunately this doesn't seem to be easy to do in clean manner.
> 
> As far as I got to investigate, there is no single place in which to 
> make the catch, as we seemingly have multiple code paths for executing 
> forms that fail to share common handler code.  For your new test case of 
> making the error appear in a MAKE-THREAD, the handler is actually 
> created within the LispThread(Function, LispThread) constructor, which 
> shares no common code with the place I patched the INTERACTIVE-EVAL 
> handler in Lisp.java.  And neither of these share code with the top 
> level eval that can be created by invoking Interpreter.eval(String).
> 
> Out of time for today, but others please chime in to correct/enhance my 
> understanding.
> 
> 
> -- 
> "A screaming comes across the sky.  It has happened before, but there
> is nothing to compare to it now."
> 
> _______________________________________________
> armedbear-devel mailing list
> armedbear-devel at common-lisp.net
> http://common-lisp.net/cgi-bin/mailman/listinfo/armedbear-devel




More information about the armedbear-devel mailing list