PatchSet 6643 
Date: 2005/06/13 15:44:41
Author: guilhem
Branch: HEAD
Tag: (none) 
Log:
Fixed NPE problem on StackTraceElement.

        * kaffe/kaffevm/baseClasses.c
        (stateCompleteClass): New array to store classes that should be in
        complete state at the end of the first initialization procedure.
        (initBaseClasses): Push all classes in stateCompleteClass to the
        COMPLETE state.

        * kaffe/kaffevm/gcFuncs.c
        (walkRefArray): Added some debug printing.
        (newArrayChecked): Removed unused condition.

        * kaffe/kaffevm/jni/jni.c: Cleaned up style.

Members: 
        ChangeLog:1.4169->1.4170 
        kaffe/kaffevm/baseClasses.c:1.66->1.67 
        kaffe/kaffevm/gcFuncs.c:1.75->1.76 
        kaffe/kaffevm/object.c:1.35->1.36 
        kaffe/kaffevm/jni/jni.c:1.33->1.34 

Index: kaffe/ChangeLog
diff -u kaffe/ChangeLog:1.4169 kaffe/ChangeLog:1.4170
--- kaffe/ChangeLog:1.4169      Mon Jun 13 13:13:10 2005
+++ kaffe/ChangeLog     Mon Jun 13 15:44:41 2005
@@ -1,5 +1,19 @@
 2005-06-13  Guilhem Lavaux  <[EMAIL PROTECTED]>
 
+       * kaffe/kaffevm/baseClasses.c
+       (stateCompleteClass): New array to store classes that should be in
+       complete state at the end of the first initialization procedure.
+       (initBaseClasses): Push all classes in stateCompleteClass to the
+       COMPLETE state.
+
+       * kaffe/kaffevm/gcFuncs.c
+       (walkRefArray): Added some debug printing.
+       (newArrayChecked): Removed unused condition.
+
+       * kaffe/kaffevm/jni/jni.c: Cleaned up style.
+
+2005-06-13  Guilhem Lavaux  <[EMAIL PROTECTED]>
+
        * test/regression/Preempt.java: Added a 'yield' for Solaris.
 
 2005-06-13  Guilhem Lavaux  <[EMAIL PROTECTED]>
Index: kaffe/kaffe/kaffevm/baseClasses.c
diff -u kaffe/kaffe/kaffevm/baseClasses.c:1.66 
kaffe/kaffe/kaffevm/baseClasses.c:1.67
--- kaffe/kaffe/kaffevm/baseClasses.c:1.66      Mon May 30 21:16:02 2005
+++ kaffe/kaffe/kaffevm/baseClasses.c   Mon Jun 13 15:44:44 2005
@@ -97,6 +97,21 @@
 /* Let's not load this if we can't open Klasses.jar */
 Hjava_lang_Class* javaIoIOException;
 
+static Hjava_lang_Class** stateCompleteClass[] = {
+  &StringClass,
+  &javaLangThrowable,
+  &javaLangVMThrowable,
+  &javaLangStackTraceElement,
+  &javaLangException,
+  &javaLangArrayIndexOutOfBoundsException,
+  &javaLangNullPointerException,
+  &javaLangArithmeticException,
+  &javaLangClassNotFoundException,
+  &javaLangNoClassDefFoundError,
+  &javaLangStackOverflowError,
+  NULL
+};
+
 #define RUNTIMECLASS "java/lang/Runtime"
 #define SYSTEMCLASS  "java/lang/System"
 #define        SERIALCLASS  "java/io/Serializable"
@@ -294,6 +309,7 @@
 initBaseClasses(void)
 {
        errorInfo einfo;
+       int i;
 
        DBG(INIT, dprintf("initBaseClasses()\n"); );
 
@@ -352,7 +368,9 @@
 
        DBG(INIT, dprintf("initBaseClasses() done\n"); );
 
-       if (!processClass(StringClass, CSTATE_COMPLETE, &einfo))
-               abortWithEarlyClassFailure(&einfo);
+       for (i = 0; stateCompleteClass[i] != NULL; i++) {
+           if (!processClass(*stateCompleteClass[i], CSTATE_COMPLETE, &einfo))
+             abortWithEarlyClassFailure(&einfo);
+       }
 }
 
Index: kaffe/kaffe/kaffevm/gcFuncs.c
diff -u kaffe/kaffe/kaffevm/gcFuncs.c:1.75 kaffe/kaffe/kaffevm/gcFuncs.c:1.76
--- kaffe/kaffe/kaffevm/gcFuncs.c:1.75  Mon May 30 21:16:03 2005
+++ kaffe/kaffe/kaffevm/gcFuncs.c       Mon Jun 13 15:44:44 2005
@@ -496,6 +496,10 @@
        if (lk != NULL && KGC_getObjectIndex(collector, lk) == KGC_ALLOC_LOCK)
          KGC_markObject(collector, gc_info, lk);
 
+DBG(GCPRECISE,
+        dprintf("walkRefArray `%s' (num=%d)\n", 
CLASS_CNAME(arr->vtable->class), ARRAY_SIZE(arr));
+   );
+
        ptr = OBJARRAY_DATA(arr);
         /* mark class only if not a system class (which would be anchored
          * anyway.)  */
@@ -503,7 +507,7 @@
                 KGC_markObject(collector, gc_info, arr->vtable->class);
         }
 
-        for (i = ARRAY_SIZE(arr); --i>= 0; ) {
+        for (i = ARRAY_SIZE(arr); i > 0; i--) {
                 Hjava_lang_Object* el = *ptr++;
                /*
                 * NB: This would break if some objects (i.e. class objects)
Index: kaffe/kaffe/kaffevm/object.c
diff -u kaffe/kaffe/kaffevm/object.c:1.35 kaffe/kaffe/kaffevm/object.c:1.36
--- kaffe/kaffe/kaffevm/object.c:1.35   Mon May 30 21:16:03 2005
+++ kaffe/kaffe/kaffevm/object.c        Mon Jun 13 15:44:44 2005
@@ -143,18 +143,15 @@
                if (CLASS_IS_PRIMITIVE(elclass) || elclass == PtrClass) {
                        total_count = (TYPE_SIZE(elclass) * count) +
                                ARRAY_DATA_OFFSET;
-                       if (total_count > count) {
-                               obj = gc_malloc(total_count,
-                                               KGC_ALLOC_PRIMARRAY);
-                       }
+                       obj = gc_malloc(total_count,
+                                       KGC_ALLOC_PRIMARRAY);
                }
                else {
                        total_count = (PTR_TYPE_SIZE * count) +
                                ARRAY_DATA_OFFSET;
-                       if (total_count > count) {
-                               obj = gc_malloc(total_count,
-                                               KGC_ALLOC_REFARRAY);
-                       }
+
+                       obj = gc_malloc(total_count,
+                                       KGC_ALLOC_REFARRAY);
                }
                if (obj != NULL) {
                        KaffeVM_setFinalizer(obj, KGC_DEFAULT_FINALIZER);
Index: kaffe/kaffe/kaffevm/jni/jni.c
diff -u kaffe/kaffe/kaffevm/jni/jni.c:1.33 kaffe/kaffe/kaffevm/jni/jni.c:1.34
--- kaffe/kaffe/kaffevm/jni/jni.c:1.33  Sun Jun 12 07:37:34 2005
+++ kaffe/kaffe/kaffevm/jni/jni.c       Mon Jun 13 15:44:44 2005
@@ -558,8 +558,7 @@
               
               printStackTrace (eobj, NULL, true);
 
-              if (eobj->cause != eobj)
-              {
+              if (eobj->cause != eobj) {
                       eobj = eobj->cause;
                       kprintf(stderr, "caused by: ");
               } else

_______________________________________________
kaffe mailing list
[email protected]
http://kaffe.org/cgi-bin/mailman/listinfo/kaffe

Reply via email to