Your patch is a good start. There may be a few issues not addressed by this patch: 1. Java_tcl_lang_Interp_create() may need a separate C mutex to prevent more than one thread from creating the JVM when used in the threaded version of Tcl. I don't think know the effect of trying to call JavaSetupJava() from more than one thread at the same time. 2. Bugs in the Notifier class are not addressed. "update" or "vwait" command will cause infinite loop. Events are not removed properly from the event list. "vwait" can deadlock due to synchronization. The above problems need to be fixed in order for TclBlend to pass most of the Tcl regression tests. -- Jiang Wu [EMAIL PROTECTED] -----Original Message----- From: Mo DeJong [mailto:[EMAIL PROTECTED]] Sent: Thursday, June 15, 2000 6:45 AM To: [EMAIL PROTECTED] Subject: [Tcl Java] New patch for loading of TclBlend from Java Hi all. I have a new patch that adds support for loading of TclBlend into a Java, it is a little less complex than the solution Jiang proposed. Here is the source file I am using. % cat LoadTclBlend.java import tcl.lang.*; public class LoadTclBlend { public static void main(String[] args) throws Exception { Interp i = new Interp(); i.setVar("i", "1", 0); i.eval("puts \"i is $i\""); i.eval("package require java"); i.eval("set str [java::new String \"I am a Java String\"]"); i.eval("puts [$str toString]"); } } Here are the results with IBM JDK 1.3. % java LoadTclBlend i is 1 I am a Java String Here is the patch I used: Index: src/native/java.h =================================================================== RCS file: /home/cvs/external/tcljava/src/native/java.h,v retrieving revision 1.6 diff -u -r1.6 java.h --- java.h 2000/06/15 09:47:06 1.6 +++ java.h 2000/06/15 13:37:18 @@ -133,7 +133,9 @@ jmethodID invokeTimer; } JavaInfo; +/* These are defined in javaCmd.c */ extern JavaInfo java; +extern JNIEnv *currentEnv; /* * The following macros are used to enter and leave the global Index: src/native/javaCmd.c =================================================================== RCS file: /home/cvs/external/tcljava/src/native/javaCmd.c,v retrieving revision 1.9 diff -u -r1.9 javaCmd.c --- javaCmd.c 2000/06/15 09:47:06 1.9 +++ javaCmd.c 2000/06/15 13:37:18 @@ -62,7 +62,7 @@ * will contain the environment for the default thread. */ -static JNIEnv *currentEnv = NULL; /* JNI pointer for current thread. */ +JNIEnv *currentEnv = NULL; /* JNI pointer for current thread. */ /* * The following variable contains the pointer to the current Java VM, Index: src/native/javaInterp.c =================================================================== RCS file: /home/cvs/external/tcljava/src/native/javaInterp.c,v retrieving revision 1.6 diff -u -r1.6 javaInterp.c --- javaInterp.c 2000/06/15 09:47:07 1.6 +++ javaInterp.c 2000/06/15 13:37:19 @@ -101,8 +101,11 @@ jlong lvalue; Tcl_Interp *interp; JNIEnv *oldEnv; + int loadedFromJava = (currentEnv == NULL); /* true if Tcl Blend was loaded into Java */ - PUSH_JAVA_ENV(); + if (! loadedFromJava) { + PUSH_JAVA_ENV(); + } interp = Tcl_CreateInterp(); if (JavaSetupJava(env, interp) != TCL_OK) { @@ -116,7 +119,9 @@ *(Tcl_Interp**)&lvalue = interp; } - POP_JAVA_ENV(); + if (! loadedFromJava) { + POP_JAVA_ENV(); + } return lvalue; } What do you think? We still need to solve some other deadlocking problems, but at least it loads without a SIGSEGV now :) 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