PatchSet 7427 
Date: 2006/09/25 18:24:14
Author: guilhem
Branch: HEAD
Tag: (none) 
Log:
JNI weak ref fix.

2006-09-25  Guilhem Lavaux  <[EMAIL PROTECTED]>

        * kaffe/kaffevm/jni/jni-refs.c
        (KaffeJNI_NewWeakGlobalRef): Fixed allocation of the weak reference.
        (KaffeJNI_DeleteWeakGlobalRef): Fixed deletion of the weak
        reference.

        * kaffe/kaffevm/kaffe-gc/gc-incremental.c:
        (gc_heap_isobject): Consider FIXED object as a member of the heap.

Members: 
        ChangeLog:1.4927->1.4928 
        kaffe/kaffevm/jni/jni-refs.c:1.6->1.7 
        kaffe/kaffevm/kaffe-gc/gc-incremental.c:1.36->1.37 

Index: kaffe/ChangeLog
diff -u kaffe/ChangeLog:1.4927 kaffe/ChangeLog:1.4928
--- kaffe/ChangeLog:1.4927      Sun Sep 24 21:26:19 2006
+++ kaffe/ChangeLog     Mon Sep 25 18:24:14 2006
@@ -1,3 +1,15 @@
+2006-09-25  Guilhem Lavaux  <[EMAIL PROTECTED]>
+
+       * kaffe/kaffevm/jni/jni-refs.c
+       (KaffeJNI_NewWeakGlobalRef): Fixed allocation of the weak reference.
+       (KaffeJNI_DeleteWeakGlobalRef): Fixed deletion of the weak
+       reference.
+
+       * kaffe/kaffevm/kaffe-gc/gc-incremental.c: 
+       (gc_heap_isobject): Consider FIXED object as a member of the heap.
+       
+       Reported by Tim Bevan <[EMAIL PROTECTED]>
+
 2006-09-24  Dalibor Topic  <[EMAIL PROTECTED]>
 
        * 
libraries/javalib/external/classpath/native/jni/java-nio/gnu_java_nio_VMSelector.c:
Index: kaffe/kaffe/kaffevm/jni/jni-refs.c
diff -u kaffe/kaffe/kaffevm/jni/jni-refs.c:1.6 
kaffe/kaffe/kaffevm/jni/jni-refs.c:1.7
--- kaffe/kaffe/kaffevm/jni/jni-refs.c:1.6      Mon Dec 26 22:35:56 2005
+++ kaffe/kaffe/kaffevm/jni/jni-refs.c  Mon Sep 25 18:24:21 2006
@@ -258,7 +258,7 @@
 
   obj_local = unveil(obj);
 
-  ref = KGC_malloc(main_collector, KGC_ALLOC_VMWEAKREF, sizeof(jobject));
+  ref = KGC_malloc(main_collector, sizeof(jobject), KGC_ALLOC_VMWEAKREF);
 
   *((jobject *)ref) = obj_local;
   KGC_addWeakRef(main_collector, ref, obj_local);
@@ -287,7 +287,8 @@
 
   BEGIN_EXCEPTION_HANDLING_VOID();
 
-  assert(KGC_getObjectIndex(main_collector, ref) == KGC_ALLOC_VMWEAKREF);
+  void *ref2 = (void*)(((uintp)ref) & (~(uintp)1));
+  assert(KGC_getObjectIndex(main_collector, ref2) == KGC_ALLOC_VMWEAKREF);
 
 #if defined(ENABLE_JVMPI)
   if( JVMPI_EVENT_ISENABLED(JVMPI_EVENT_JNI_WEAK_GLOBALREF_FREE) )
@@ -302,8 +303,8 @@
 
   obj = unveil(ref);
 
-  KGC_rmWeakRef(main_collector, ref, obj);
-  KFREE(obj);
+  KGC_rmWeakRef(main_collector, ref2, obj);
+  KFREE(ref2);
 
   END_EXCEPTION_HANDLING();
 }
Index: kaffe/kaffe/kaffevm/kaffe-gc/gc-incremental.c
diff -u kaffe/kaffe/kaffevm/kaffe-gc/gc-incremental.c:1.36 
kaffe/kaffe/kaffevm/kaffe-gc/gc-incremental.c:1.37
--- kaffe/kaffe/kaffevm/kaffe-gc/gc-incremental.c:1.36  Mon Feb  6 21:09:57 2006
+++ kaffe/kaffe/kaffevm/kaffe-gc/gc-incremental.c       Mon Sep 25 18:24:21 2006
@@ -247,7 +247,7 @@
                uint16 idx = GCMEM2IDX(info, unit);
                if (idx < info->nr &&
                    GCBLOCK2MEM(info, idx) == unit &&
-                   (KGC_GET_COLOUR(info, idx) & KGC_COLOUR_INUSE) == 
KGC_COLOUR_INUSE) {
+                   ((KGC_GET_COLOUR(info, idx) & KGC_COLOUR_INUSE) == 
KGC_COLOUR_INUSE || KGC_GET_COLOUR(info, idx) == KGC_COLOUR_FIXED)) {
                        return 1;
                }
        }

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

Reply via email to