equal
deleted
inserted
replaced
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 |