< prev index next >
src/share/vm/oops/klass.cpp
Print this page
rev 12854 : [mq]: gcinterface.patch
*** 438,486 ****
}
}
}
}
- void Klass::klass_update_barrier_set(oop v) {
- record_modified_oops();
- }
-
- // This barrier is used by G1 to remember the old oop values, so
- // that we don't forget any objects that were live at the snapshot at
- // the beginning. This function is only used when we write oops into Klasses.
- void Klass::klass_update_barrier_set_pre(oop* p, oop v) {
- #if INCLUDE_ALL_GCS
- if (UseG1GC) {
- oop obj = *p;
- if (obj != NULL) {
- G1SATBCardTableModRefBS::enqueue(obj);
- }
- }
- #endif
- }
-
void Klass::klass_oop_store(oop* p, oop v) {
! assert(!Universe::heap()->is_in_reserved((void*)p), "Should store pointer into metadata");
! assert(v == NULL || Universe::heap()->is_in_reserved((void*)v), "Should store pointer to an object");
// do the store
! if (always_do_update_barrier) {
! klass_oop_store((volatile oop*)p, v);
! } else {
! klass_update_barrier_set_pre(p, v);
! *p = v;
! klass_update_barrier_set(v);
! }
}
void Klass::klass_oop_store(volatile oop* p, oop v) {
! assert(!Universe::heap()->is_in_reserved((void*)p), "Should store pointer into metadata");
! assert(v == NULL || Universe::heap()->is_in_reserved((void*)v), "Should store pointer to an object");
! klass_update_barrier_set_pre((oop*)p, v); // Cast away volatile.
! OrderAccess::release_store_ptr(p, v);
! klass_update_barrier_set(v);
}
void Klass::oops_do(OopClosure* cl) {
cl->do_oop(&_java_mirror);
}
--- 438,462 ----
}
}
}
}
void Klass::klass_oop_store(oop* p, oop v) {
! assert(!GC::gc()->heap()->is_in_reserved((void*)p), "Should store pointer into metadata");
! assert(v == NULL || GC::gc()->heap()->is_in_reserved((void*)v), "Should store pointer to an object");
// do the store
! oopDesc::bs()->klass_oop_store(p, v);
! record_modified_oops();
}
void Klass::klass_oop_store(volatile oop* p, oop v) {
! assert(!GC::gc()->heap()->is_in_reserved((void*)p), "Should store pointer into metadata");
! assert(v == NULL || GC::gc()->heap()->is_in_reserved((void*)v), "Should store pointer to an object");
! oopDesc::bs()->klass_oop_store(p, v);
! record_modified_oops();
}
void Klass::oops_do(OopClosure* cl) {
cl->do_oop(&_java_mirror);
}
< prev index next >