src/hotspot/share/gc/shared/stringdedup/stringDedupTable.cpp
changeset 50803 45c1fde86050
parent 50676 8c0a5b51559b
child 51332 c25572739e7c
equal deleted inserted replaced
50802:fa380b3b2b7d 50803:45c1fde86050
   279 
   279 
   280 typeArrayOop StringDedupTable::lookup(typeArrayOop value, bool latin1, unsigned int hash,
   280 typeArrayOop StringDedupTable::lookup(typeArrayOop value, bool latin1, unsigned int hash,
   281                                       StringDedupEntry** list, uintx &count) {
   281                                       StringDedupEntry** list, uintx &count) {
   282   for (StringDedupEntry* entry = *list; entry != NULL; entry = entry->next()) {
   282   for (StringDedupEntry* entry = *list; entry != NULL; entry = entry->next()) {
   283     if (entry->hash() == hash && entry->latin1() == latin1) {
   283     if (entry->hash() == hash && entry->latin1() == latin1) {
   284       typeArrayOop existing_value = entry->obj();
   284       oop* obj_addr = (oop*)entry->obj_addr();
   285       if (equals(value, existing_value)) {
   285       oop obj = NativeAccess<ON_PHANTOM_OOP_REF | AS_NO_KEEPALIVE>::oop_load(obj_addr);
   286         // Apply proper barrier to make sure it is kept alive. Concurrent mark might
   286       if (equals(value, static_cast<typeArrayOop>(obj))) {
   287         // otherwise declare it dead if there are no other strong references to this object.
   287         obj = NativeAccess<ON_PHANTOM_OOP_REF>::oop_load(obj_addr);
   288         oop* obj_addr = (oop*)entry->obj_addr();
   288         return static_cast<typeArrayOop>(obj);
   289         oop obj = NativeAccess<IN_CONCURRENT_ROOT | ON_WEAK_OOP_REF>::oop_load(obj_addr);
       
   290         return typeArrayOop(obj);
       
   291       }
   289       }
   292     }
   290     }
   293     count++;
   291     count++;
   294   }
   292   }
   295 
   293