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