Mercurial > hg > truffle
comparison src/share/vm/classfile/systemDictionary.cpp @ 6988:2cb439954abf
Merge with http://hg.openjdk.java.net/hsx/hsx25/hotspot/
author | Gilles Duboscq <duboscq@ssw.jku.at> |
---|---|
date | Mon, 19 Nov 2012 15:36:13 +0100 |
parents | e522a00b91aa 070d523b96a7 |
children | 291ffc492eb6 |
comparison
equal
deleted
inserted
replaced
6963:dd0dd0321e2a | 6988:2cb439954abf |
---|---|
238 k = SystemDictionary::resolve_instance_class_or_null(fd.object_key(), | 238 k = SystemDictionary::resolve_instance_class_or_null(fd.object_key(), |
239 class_loader, | 239 class_loader, |
240 protection_domain, | 240 protection_domain, |
241 CHECK_NULL); | 241 CHECK_NULL); |
242 if (k != NULL) { | 242 if (k != NULL) { |
243 k = Klass::cast(k)->array_klass(fd.dimension(), CHECK_NULL); | 243 k = k->array_klass(fd.dimension(), CHECK_NULL); |
244 } | 244 } |
245 } else { | 245 } else { |
246 k = Universe::typeArrayKlassObj(t); | 246 k = Universe::typeArrayKlassObj(t); |
247 k = TypeArrayKlass::cast(k)->array_klass(fd.dimension(), CHECK_NULL); | 247 k = TypeArrayKlass::cast(k)->array_klass(fd.dimension(), CHECK_NULL); |
248 } | 248 } |
326 // so we don't throw an exception here. | 326 // so we don't throw an exception here. |
327 // see: nsk redefclass014 & java.lang.instrument Instrument032 | 327 // see: nsk redefclass014 & java.lang.instrument Instrument032 |
328 if ((childk != NULL ) && (is_superclass) && | 328 if ((childk != NULL ) && (is_superclass) && |
329 ((quicksuperk = InstanceKlass::cast(childk)->super()) != NULL) && | 329 ((quicksuperk = InstanceKlass::cast(childk)->super()) != NULL) && |
330 | 330 |
331 ((Klass::cast(quicksuperk)->name() == class_name) && | 331 ((quicksuperk->name() == class_name) && |
332 (Klass::cast(quicksuperk)->class_loader() == class_loader()))) { | 332 (quicksuperk->class_loader() == class_loader()))) { |
333 return quicksuperk; | 333 return quicksuperk; |
334 } else { | 334 } else { |
335 PlaceholderEntry* probe = placeholders()->get_entry(p_index, p_hash, child_name, loader_data); | 335 PlaceholderEntry* probe = placeholders()->get_entry(p_index, p_hash, child_name, loader_data); |
336 if (probe && probe->check_seen_thread(THREAD, PlaceholderTable::LOAD_SUPER)) { | 336 if (probe && probe->check_seen_thread(THREAD, PlaceholderTable::LOAD_SUPER)) { |
337 throw_circularity_error = true; | 337 throw_circularity_error = true; |
926 k = Universe::typeArrayKlassObj(t); | 926 k = Universe::typeArrayKlassObj(t); |
927 } else { | 927 } else { |
928 k = SystemDictionary::find(fd.object_key(), class_loader, protection_domain, THREAD); | 928 k = SystemDictionary::find(fd.object_key(), class_loader, protection_domain, THREAD); |
929 } | 929 } |
930 if (k != NULL) { | 930 if (k != NULL) { |
931 k = Klass::cast(k)->array_klass_or_null(fd.dimension()); | 931 k = k->array_klass_or_null(fd.dimension()); |
932 } | 932 } |
933 } else { | 933 } else { |
934 k = find(class_name, class_loader, protection_domain, THREAD); | 934 k = find(class_name, class_loader, protection_domain, THREAD); |
935 } | 935 } |
936 return k; | 936 return k; |
1535 SystemDictionary_lock->wait(); | 1535 SystemDictionary_lock->wait(); |
1536 } | 1536 } |
1537 // Only special cases allow parallel defines and can use other thread's results | 1537 // Only special cases allow parallel defines and can use other thread's results |
1538 // Other cases fall through, and may run into duplicate defines | 1538 // Other cases fall through, and may run into duplicate defines |
1539 // caught by finding an entry in the SystemDictionary | 1539 // caught by finding an entry in the SystemDictionary |
1540 if ((UnsyncloadClass || is_parallelDefine(class_loader)) && (probe->InstanceKlass() != NULL)) { | 1540 if ((UnsyncloadClass || is_parallelDefine(class_loader)) && (probe->instance_klass() != NULL)) { |
1541 probe->remove_seen_thread(THREAD, PlaceholderTable::DEFINE_CLASS); | 1541 probe->remove_seen_thread(THREAD, PlaceholderTable::DEFINE_CLASS); |
1542 placeholders()->find_and_remove(p_index, p_hash, name_h, loader_data, THREAD); | 1542 placeholders()->find_and_remove(p_index, p_hash, name_h, loader_data, THREAD); |
1543 SystemDictionary_lock->notify_all(); | 1543 SystemDictionary_lock->notify_all(); |
1544 #ifdef ASSERT | 1544 #ifdef ASSERT |
1545 Klass* check = find_class(d_index, d_hash, name_h, loader_data); | 1545 Klass* check = find_class(d_index, d_hash, name_h, loader_data); |
1546 assert(check != NULL, "definer missed recording success"); | 1546 assert(check != NULL, "definer missed recording success"); |
1547 #endif | 1547 #endif |
1548 return(instanceKlassHandle(THREAD, probe->InstanceKlass())); | 1548 return(instanceKlassHandle(THREAD, probe->instance_klass())); |
1549 } else { | 1549 } else { |
1550 // This thread will define the class (even if earlier thread tried and had an error) | 1550 // This thread will define the class (even if earlier thread tried and had an error) |
1551 probe->set_definer(THREAD); | 1551 probe->set_definer(THREAD); |
1552 } | 1552 } |
1553 } | 1553 } |
1564 if (probe != NULL) { | 1564 if (probe != NULL) { |
1565 if (HAS_PENDING_EXCEPTION) { | 1565 if (HAS_PENDING_EXCEPTION) { |
1566 linkage_exception = Handle(THREAD,PENDING_EXCEPTION); | 1566 linkage_exception = Handle(THREAD,PENDING_EXCEPTION); |
1567 CLEAR_PENDING_EXCEPTION; | 1567 CLEAR_PENDING_EXCEPTION; |
1568 } else { | 1568 } else { |
1569 probe->set_instanceKlass(k()); | 1569 probe->set_instance_klass(k()); |
1570 } | 1570 } |
1571 probe->set_definer(NULL); | 1571 probe->set_definer(NULL); |
1572 probe->remove_seen_thread(THREAD, PlaceholderTable::DEFINE_CLASS); | 1572 probe->remove_seen_thread(THREAD, PlaceholderTable::DEFINE_CLASS); |
1573 placeholders()->find_and_remove(p_index, p_hash, name_h, loader_data, THREAD); | 1573 placeholders()->find_and_remove(p_index, p_hash, name_h, loader_data, THREAD); |
1574 SystemDictionary_lock->notify_all(); | 1574 SystemDictionary_lock->notify_all(); |
2147 MutexLocker mu(SystemDictionary_lock, THREAD); | 2147 MutexLocker mu(SystemDictionary_lock, THREAD); |
2148 klass = constraints()->find_constrained_klass(fd.object_key(), class_loader); | 2148 klass = constraints()->find_constrained_klass(fd.object_key(), class_loader); |
2149 } | 2149 } |
2150 // If element class already loaded, allocate array klass | 2150 // If element class already loaded, allocate array klass |
2151 if (klass != NULL) { | 2151 if (klass != NULL) { |
2152 klass = Klass::cast(klass)->array_klass_or_null(fd.dimension()); | 2152 klass = klass->array_klass_or_null(fd.dimension()); |
2153 } | 2153 } |
2154 } else { | 2154 } else { |
2155 MutexLocker mu(SystemDictionary_lock, THREAD); | 2155 MutexLocker mu(SystemDictionary_lock, THREAD); |
2156 // Non-array classes are easy: simply check the constraint table. | 2156 // Non-array classes are easy: simply check the constraint table. |
2157 klass = constraints()->find_constrained_klass(class_name, class_loader); | 2157 klass = constraints()->find_constrained_klass(class_name, class_loader); |
2464 // Check accessibility. | 2464 // Check accessibility. |
2465 if (ss.is_object() && accessing_klass.not_null()) { | 2465 if (ss.is_object() && accessing_klass.not_null()) { |
2466 Klass* sel_klass = java_lang_Class::as_Klass(mirror); | 2466 Klass* sel_klass = java_lang_Class::as_Klass(mirror); |
2467 mirror = NULL; // safety | 2467 mirror = NULL; // safety |
2468 // Emulate ConstantPool::verify_constant_pool_resolve. | 2468 // Emulate ConstantPool::verify_constant_pool_resolve. |
2469 if (Klass::cast(sel_klass)->oop_is_objArray()) | 2469 if (sel_klass->oop_is_objArray()) |
2470 sel_klass = ObjArrayKlass::cast(sel_klass)->bottom_klass(); | 2470 sel_klass = ObjArrayKlass::cast(sel_klass)->bottom_klass(); |
2471 if (Klass::cast(sel_klass)->oop_is_instance()) { | 2471 if (sel_klass->oop_is_instance()) { |
2472 KlassHandle sel_kh(THREAD, sel_klass); | 2472 KlassHandle sel_kh(THREAD, sel_klass); |
2473 LinkResolver::check_klass_accessability(accessing_klass, sel_kh, CHECK_(empty)); | 2473 LinkResolver::check_klass_accessability(accessing_klass, sel_kh, CHECK_(empty)); |
2474 } | 2474 } |
2475 } | 2475 } |
2476 } | 2476 } |