< prev index next >
src/hotspot/share/gc/shared/stringdedup/stringDedupTable.cpp
Print this page
rev 50745 : imported patch remove_in_concurrent_root
*** 279,295 ****
typeArrayOop StringDedupTable::lookup(typeArrayOop value, bool latin1, unsigned int hash,
StringDedupEntry** list, uintx &count) {
for (StringDedupEntry* entry = *list; entry != NULL; entry = entry->next()) {
if (entry->hash() == hash && entry->latin1() == latin1) {
- typeArrayOop existing_value = entry->obj();
- if (equals(value, existing_value)) {
- // Apply proper barrier to make sure it is kept alive. Concurrent mark might
- // otherwise declare it dead if there are no other strong references to this object.
oop* obj_addr = (oop*)entry->obj_addr();
! oop obj = NativeAccess<IN_CONCURRENT_ROOT | ON_WEAK_OOP_REF>::oop_load(obj_addr);
! return typeArrayOop(obj);
}
}
count++;
}
--- 279,293 ----
typeArrayOop StringDedupTable::lookup(typeArrayOop value, bool latin1, unsigned int hash,
StringDedupEntry** list, uintx &count) {
for (StringDedupEntry* entry = *list; entry != NULL; entry = entry->next()) {
if (entry->hash() == hash && entry->latin1() == latin1) {
oop* obj_addr = (oop*)entry->obj_addr();
! oop obj = NativeAccess<ON_PHANTOM_OOP_REF | AS_NO_KEEPALIVE>::oop_load(obj_addr);
! if (equals(value, static_cast<typeArrayOop>(obj))) {
! obj = NativeAccess<ON_PHANTOM_OOP_REF>::oop_load(obj_addr);
! return static_cast<typeArrayOop>(obj);
}
}
count++;
}
< prev index next >