Hmm, I just realized that the issue is the Interp.eval code isn't thread
safe, so it just needs to run in a single Java thread (not necessarily the
Java main thread).  So the code I suggested below won't work but you get the
idea -- have the code sanity check the call and not silently allow someone
to stumble on a known limitation in the code...

thanks
  - Mike

 > Resent-Date: Tue, 25 Jul 2000 13:11:49 -0700 (PDT)
 > X-Sender: [EMAIL PROTECTED]
 > X-Mailer: QUALCOMM Windows Eudora Version 4.3.2
 > Date: Tue, 25 Jul 2000 14:09:44 -0600
 > To: Mo DeJong <[EMAIL PROTECTED]>
 > From: Mike Schwartz <[EMAIL PROTECTED]>
 > Cc: [EMAIL PROTECTED]
 > Resent-From: [EMAIL PROTECTED]
 > X-Mailing-List: <[EMAIL PROTECTED]> archive/latest/1044
 > X-Loop: [EMAIL PROTECTED]
 > Resent-Sender: [EMAIL PROTECTED]
 > Subject: [Tcl Java] Re: [Tcl Java] problem invoking tclBlend calls from 
within
 >   Java threads
 >
 >
 > Hi Mo,
 >
 >
 > I have a suggestion: put this at the top of thetcl.lang.Interp.eval() code:
 >     if (!(Thread.currentThread().getName().equals("main"))) {
 >         throw new TclException(
 >             "tcl.lang.Interp.eval() cannot be called from any Java 
thread other than main."
 >             + "Please see 
http://www-cs-students.stanford.edu/~jwu/Using_Tcl_in_Java.html"
 >         );
 >     }
 > (or whatever web reference you think will be around and stable --
 > probably should be at scriptics.com)
 >
 >
 > That way, people will find out about the shortcoming directly, rather
 > than having to dig into their code and figure it out for themselves.
 >
 >
 > Thanks,
 >  - Mike
 >
 >
 > > Date: Tue, 25 Jul 2000 12:23:55 -0700 (PDT)
 > > From: Mo DeJong <[EMAIL PROTECTED]>
 > > To: Mike Schwartz <[EMAIL PROTECTED]>
 > > cc: [EMAIL PROTECTED]
 > > Subject: Re: [Tcl Java] problem invoking tclBlend calls from within 
Java threads
 > >
 > >
 > > On Tue, 25 Jul 2000, Mike Schwartz wrote:
 > >
 > >
 > > > Hi,
 > > >
 > > > I've come across another problem with tclBlend.
 > > ...
 > > > Synopsis: if you start up a Java program from Tcl and that Java program
 > > > creates multiple threads that try to invoke tcl.lang.Interp.eval() (with
 > > > appropriate synchronization so they are not interspersing commands with
 > > > each other), the threads hang waiting for the eval call to complete.
 > >
 > >
 > >
 > > We really need to embed a .wav file in tcljava.jar that plays
 > > "You can't do that dave" when someone tries to call Interp.eval()
 > > from another thread. If you try this, things wil get really hosed
 > > (as you found out).
 > >
 > >
 > > Here are some posts that cover how to do it correctly.
 > >
 > >
 > > http://www.mail-archive.com/tcljava@scriptics.com/msg00647.html
 > >
 > >
 > > http://www.mail-archive.com/tcljava@scriptics.com/msg00604.html
 > >
 > >
 > > http://www.mail-archive.com/tcljava@scriptics.com/msg00619.html
 > >
 > >
 > > Jiang also wrote up a nice overview of the situation, you
 > > can find his paper here:
 > >
 > >
 > > http://www-cs-students.stanford.edu/~jwu/Using_Tcl_in_Java.html
 > >
 > >
 > > Getting all of this shared knowledge back into the documentation
 > > is on the TODO list. We also need some nice small examples that
 > > people can look at without having to read all the API docs.
 > >
 > >
 > > Mo DeJong
 > > Red Hat Inc
 >
 >
 > ----------------------------------------------------------------
 > The TclJava mailing list is sponsored by Scriptics Corporation.
 > To subscribe:    send mail to [EMAIL PROTECTED]
 >                 with the word SUBSCRIBE as the subject.
 > To unsubscribe:  send mail to 
[EMAIL PROTECTED]                 with the word UNSUBSCRIBE as 
the subject.
 > To send to the list, send email to '[EMAIL PROTECTED]'. An archive 
is available at http://www.mail-archive.com/tcljava@scriptics.com

----------------------------------------------------------------
The TclJava mailing list is sponsored by Scriptics Corporation.
To subscribe:    send mail to [EMAIL PROTECTED]  
                 with the word SUBSCRIBE as the subject.
To unsubscribe:  send mail to [EMAIL PROTECTED] 
                 with the word UNSUBSCRIBE as the subject.
To send to the list, send email to '[EMAIL PROTECTED]'. 
An archive is available at http://www.mail-archive.com/tcljava@scriptics.com

Reply via email to