PatchSet 5975 
Date: 2005/02/05 17:12:07
Author: guilhem
Branch: HEAD
Tag: (none) 
Log:
Fix for Gump / JNI References fix.

        * kaffe/kaffevm/jni/jni.c
        (Kaffe_ExceptionOccured): Do not add the exception to the local
        reference pool if it is NULL.
        (KaffeJNI_EnsureLocalCapacity): Ensure the local JNI frame has
        sufficient capacity.
        (KaffeJNI_addJNIref): Call FatalError with a right JNI
        environment.

        * kaffe/kaffe/main.c
        (checkException): Delete the local reference to the retrieved
        exception.

        * libraries/clib/native/UNIXProcess.c
        (forkAndExec): Delete local references to the elements in the
        array.

        * kaffe/kaffevm/systems/unix-pthreads/thread-internal.h:
        Removed spurious jthread_get_stack_limits.

Members: 
        kaffe/kaffe/main.c:1.75->1.76 
        kaffe/kaffevm/jni/jni.c:1.17->1.18 
        kaffe/kaffevm/systems/unix-pthreads/thread-internal.h:1.32->1.33 
        libraries/clib/native/UNIXProcess.c:1.31->1.32 

Index: kaffe/kaffe/kaffe/main.c
diff -u kaffe/kaffe/kaffe/main.c:1.75 kaffe/kaffe/kaffe/main.c:1.76
--- kaffe/kaffe/kaffe/main.c:1.75       Wed Feb  2 13:03:02 2005
+++ kaffe/kaffe/kaffe/main.c    Sat Feb  5 17:12:07 2005
@@ -326,6 +326,7 @@
        /* Display exception stack trace */
        if ((e = (*global_env)->ExceptionOccurred(global_env)) == NULL)
                return (0);
+       (*global_env)->DeleteLocalRef(global_env, e);
        (*global_env)->ExceptionDescribe(global_env);
        (*global_env)->ExceptionClear(global_env);
 
Index: kaffe/kaffe/kaffevm/jni/jni.c
diff -u kaffe/kaffe/kaffevm/jni/jni.c:1.17 kaffe/kaffe/kaffevm/jni/jni.c:1.18
--- kaffe/kaffe/kaffevm/jni/jni.c:1.17  Fri Feb  4 10:36:15 2005
+++ kaffe/kaffe/kaffevm/jni/jni.c       Sat Feb  5 17:12:07 2005
@@ -61,7 +61,7 @@
        table = THREAD_DATA()->jnireferences;
 
        if (table->used == table->frameSize) {
-         Kaffe_FatalError(NULL, "No more room for local references");
+         Kaffe_FatalError(THREAD_DATA()->jniEnv, "No more room for local 
references");
        }
 
        idx = table->next;
@@ -105,7 +105,7 @@
 Kaffe_FatalError(JNIEnv* env UNUSED, const char* mess)
 {
        kprintf(stderr, "FATAL ERROR: %s\n", mess);
-       exit(1);
+       exit(-1);
 }
 
 static void
@@ -181,14 +181,6 @@
 }
 
 static jint
-KaffeJNI_EnsureLocalCapacity(JNIEnv* env UNUSED, jint capacity)
-{
-  BEGIN_EXCEPTION_HANDLING(-1);
-
-  END_EXCEPTION_HANDLING();
-}
-
-static jint
 KaffeJNI_PushLocalFrame(JNIEnv* env UNUSED, jint capacity)
 {
   jnirefs *table;
@@ -220,6 +212,22 @@
   return 0;
 }
 
+static jint
+KaffeJNI_EnsureLocalCapacity(JNIEnv* env, jint capacity)
+{
+  jint ret;
+
+  BEGIN_EXCEPTION_HANDLING(-1);
+
+  if (thread_data->jnireferences->used+capacity > 
+      thread_data->jnireferences->frameSize)
+    ret = KaffeJNI_PushLocalFrame(env, capacity);
+
+  END_EXCEPTION_HANDLING();
+
+  return ret;
+}
+
 static jobject
 KaffeJNI_PopLocalFrame(JNIEnv* env UNUSED, jobject obj)
 {
@@ -404,7 +412,8 @@
 
        obj = thread_data->exceptObj;
 
-       ADD_REF(obj);
+       if (obj != NULL)
+         ADD_REF(obj);
        END_EXCEPTION_HANDLING();
        return (obj);
 }
Index: kaffe/kaffe/kaffevm/systems/unix-pthreads/thread-internal.h
diff -u kaffe/kaffe/kaffevm/systems/unix-pthreads/thread-internal.h:1.32 
kaffe/kaffe/kaffevm/systems/unix-pthreads/thread-internal.h:1.33
--- kaffe/kaffe/kaffevm/systems/unix-pthreads/thread-internal.h:1.32    Sun Jan 
30 12:42:44 2005
+++ kaffe/kaffe/kaffevm/systems/unix-pthreads/thread-internal.h Sat Feb  5 
17:12:08 2005
@@ -257,13 +257,6 @@
 #endif
 }
 
-static inline
-void jthread_get_stack_limits(jthread_t t, void **smin, void **smax)
-{
-       *smin = t->stackMin;
-       *smax = t->stackMax;
-}
-
 /*
  * Get the current stack limit.
  */
Index: kaffe/libraries/clib/native/UNIXProcess.c
diff -u kaffe/libraries/clib/native/UNIXProcess.c:1.31 
kaffe/libraries/clib/native/UNIXProcess.c:1.32
--- kaffe/libraries/clib/native/UNIXProcess.c:1.31      Tue Jul  6 17:16:28 2004
+++ kaffe/libraries/clib/native/UNIXProcess.c   Sat Feb  5 17:12:08 2005
@@ -139,6 +139,7 @@
          strcpy(argv[i], argichars);
        }
       (*env)->ReleaseStringUTFChars(env, argi, argichars);
+      (*env)->DeleteLocalRef(env, argi);
 
       if (!argv[i])
        {
@@ -177,6 +178,7 @@
          strcpy(arge[i], envichars);
        }
       (*env)->ReleaseStringUTFChars(env, envi, envichars);
+      (*env)->DeleteLocalRef(env, envi);
       if (!arge[i])
        {
          errorInfo info;

_______________________________________________
kaffe mailing list
kaffe@kaffe.org
http://kaffe.org/cgi-bin/mailman/listinfo/kaffe

Reply via email to