Index: vm/gc_gen/src/mark_compact/los_extention_mark_scan.cpp =================================================================== --- vm/gc_gen/src/mark_compact/los_extention_mark_scan.cpp (revision 532501) +++ vm/gc_gen/src/mark_compact/los_extention_mark_scan.cpp (working copy) @@ -19,6 +19,10 @@ #include "../gen/gen.h" #include "../finalizer_weakref/finalizer_weakref.h" +//wjw stolen from thread_native_thin_monitor.c, line 49 +#define IS_FAT_LOCK(lockword) (lockword >> 31) +//wjw + static FORCE_INLINE void scan_slot(Collector* collector, REF *p_ref) { Partial_Reveal_Object *p_obj = read_slot(p_ref); @@ -37,6 +41,12 @@ static FORCE_INLINE void scan_object(Collector* collector, Partial_Reveal_Object *p_obj) { + //wjw + if (IS_FAT_LOCK(p_obj->obj_info)) { + //printf("fat callback on 0x%x\n", p_obj); + native_resource_is_attached_to_a_live_java_object( (void *)p_obj); + } + //wjw if( !object_has_ref_field(p_obj) ) return; REF *p_ref; Index: vm/gc_gen/src/common/gc_common.cpp =================================================================== --- vm/gc_gen/src/common/gc_common.cpp (revision 532501) +++ vm/gc_gen/src/common/gc_common.cpp (working copy) @@ -322,6 +322,9 @@ gc_assign_free_area_to_mutators(gc); + //wjw + reclaim_resources_attached_to_dead_java_objects(); + //wjw vm_resume_threads_after(); return; } Index: vm/gc_gen/src/common/mark_scan_pool.cpp =================================================================== --- vm/gc_gen/src/common/mark_scan_pool.cpp (revision 532501) +++ vm/gc_gen/src/common/mark_scan_pool.cpp (working copy) @@ -23,6 +23,10 @@ #include "../gen/gen.h" #include "../finalizer_weakref/finalizer_weakref.h" +//wjw stolen from thread_native_thin_monitor.c, line 49 +#define IS_FAT_LOCK(lockword) (lockword >> 31) +//wjw + static FORCE_INLINE void scan_slot(Collector* collector, REF *p_ref) { Partial_Reveal_Object *p_obj = read_slot(p_ref); @@ -36,6 +40,12 @@ static FORCE_INLINE void scan_object(Collector* collector, Partial_Reveal_Object *p_obj) { + //wjw + if (IS_FAT_LOCK(p_obj->obj_info)) { + //printf("fat callback on 0x%x\n", p_obj); + native_resource_is_attached_to_a_live_java_object( (void *)p_obj); + } + //wjw if( !object_has_ref_field(p_obj) ) return; REF *p_ref;