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