mirror of
https://github.com/openjdk/jdk.git
synced 2025-08-27 06:45:07 +02:00
8156500: Move Reference pending list into VM to prevent deadlocks
Move reference pending list and locking into VM Co-authored-by: Per Liden <per.liden@oracle.com> Reviewed-by: coleenp, dholmes, dcubed, mchung, plevart
This commit is contained in:
parent
4f55b6c7e0
commit
66706edf15
29 changed files with 133 additions and 576 deletions
|
@ -3015,41 +3015,6 @@ void java_lang_boxing_object::print(BasicType type, jvalue* value, outputStream*
|
|||
}
|
||||
}
|
||||
|
||||
|
||||
// Support for java_lang_ref_Reference
|
||||
HeapWord *java_lang_ref_Reference::pending_list_lock_addr() {
|
||||
InstanceKlass* ik = SystemDictionary::Reference_klass();
|
||||
address addr = ik->static_field_addr(static_lock_offset);
|
||||
return (HeapWord*) addr;
|
||||
}
|
||||
|
||||
oop java_lang_ref_Reference::pending_list_lock() {
|
||||
InstanceKlass* ik = SystemDictionary::Reference_klass();
|
||||
address addr = ik->static_field_addr(static_lock_offset);
|
||||
if (UseCompressedOops) {
|
||||
return oopDesc::load_decode_heap_oop((narrowOop *)addr);
|
||||
} else {
|
||||
return oopDesc::load_decode_heap_oop((oop*)addr);
|
||||
}
|
||||
}
|
||||
|
||||
HeapWord *java_lang_ref_Reference::pending_list_addr() {
|
||||
InstanceKlass* ik = SystemDictionary::Reference_klass();
|
||||
address addr = ik->static_field_addr(static_pending_offset);
|
||||
// XXX This might not be HeapWord aligned, almost rather be char *.
|
||||
return (HeapWord*)addr;
|
||||
}
|
||||
|
||||
oop java_lang_ref_Reference::pending_list() {
|
||||
char *addr = (char *)pending_list_addr();
|
||||
if (UseCompressedOops) {
|
||||
return oopDesc::load_decode_heap_oop((narrowOop *)addr);
|
||||
} else {
|
||||
return oopDesc::load_decode_heap_oop((oop*)addr);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Support for java_lang_ref_SoftReference
|
||||
|
||||
jlong java_lang_ref_SoftReference::timestamp(oop ref) {
|
||||
|
@ -3616,8 +3581,6 @@ int java_lang_ref_Reference::referent_offset;
|
|||
int java_lang_ref_Reference::queue_offset;
|
||||
int java_lang_ref_Reference::next_offset;
|
||||
int java_lang_ref_Reference::discovered_offset;
|
||||
int java_lang_ref_Reference::static_lock_offset;
|
||||
int java_lang_ref_Reference::static_pending_offset;
|
||||
int java_lang_ref_Reference::number_of_fake_oop_fields;
|
||||
int java_lang_ref_SoftReference::timestamp_offset;
|
||||
int java_lang_ref_SoftReference::static_clock_offset;
|
||||
|
@ -3772,8 +3735,6 @@ void JavaClasses::compute_hard_coded_offsets() {
|
|||
java_lang_ref_Reference::queue_offset = java_lang_ref_Reference::hc_queue_offset * x + header;
|
||||
java_lang_ref_Reference::next_offset = java_lang_ref_Reference::hc_next_offset * x + header;
|
||||
java_lang_ref_Reference::discovered_offset = java_lang_ref_Reference::hc_discovered_offset * x + header;
|
||||
java_lang_ref_Reference::static_lock_offset = java_lang_ref_Reference::hc_static_lock_offset * x;
|
||||
java_lang_ref_Reference::static_pending_offset = java_lang_ref_Reference::hc_static_pending_offset * x;
|
||||
// Artificial fields for java_lang_ref_Reference
|
||||
// The first field is for the discovered field added in 1.4
|
||||
java_lang_ref_Reference::number_of_fake_oop_fields = 1;
|
||||
|
@ -4006,8 +3967,6 @@ void JavaClasses::check_offsets() {
|
|||
CHECK_OFFSET("java/lang/ref/Reference", java_lang_ref_Reference, next, "Ljava/lang/ref/Reference;");
|
||||
// Fake field
|
||||
//CHECK_OFFSET("java/lang/ref/Reference", java_lang_ref_Reference, discovered, "Ljava/lang/ref/Reference;");
|
||||
CHECK_STATIC_OFFSET("java/lang/ref/Reference", java_lang_ref_Reference, lock, "Ljava/lang/ref/Reference$Lock;");
|
||||
CHECK_STATIC_OFFSET("java/lang/ref/Reference", java_lang_ref_Reference, pending, "Ljava/lang/ref/Reference;");
|
||||
|
||||
// java.lang.ref.SoftReference
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue