src/share/vm/oops/instanceKlass.cpp

changeset 5836
3374b92de2d9
parent 5786
36b97be47bde
child 5848
ac9cb1d5a202
equal deleted inserted replaced
5834:faff125a1ead 5836:3374b92de2d9
454 objArrayOop InstanceKlass::signers() const { 454 objArrayOop InstanceKlass::signers() const {
455 // return the signers from the mirror 455 // return the signers from the mirror
456 return java_lang_Class::signers(java_mirror()); 456 return java_lang_Class::signers(java_mirror());
457 } 457 }
458 458
459 volatile oop InstanceKlass::init_lock() const { 459 oop InstanceKlass::init_lock() const {
460 // return the init lock from the mirror 460 // return the init lock from the mirror
461 return java_lang_Class::init_lock(java_mirror()); 461 return java_lang_Class::init_lock(java_mirror());
462 } 462 }
463 463
464 void InstanceKlass::eager_initialize_impl(instanceKlassHandle this_oop) { 464 void InstanceKlass::eager_initialize_impl(instanceKlassHandle this_oop) {
465 EXCEPTION_MARK; 465 EXCEPTION_MARK;
466 volatile oop init_lock = this_oop->init_lock(); 466 oop init_lock = this_oop->init_lock();
467 ObjectLocker ol(init_lock, THREAD); 467 ObjectLocker ol(init_lock, THREAD);
468 468
469 // abort if someone beat us to the initialization 469 // abort if someone beat us to the initialization
470 if (!this_oop->is_not_initialized()) return; // note: not equivalent to is_initialized() 470 if (!this_oop->is_not_initialized()) return; // note: not equivalent to is_initialized()
471 471
606 jt->get_thread_stat()->perf_timers_addr(), 606 jt->get_thread_stat()->perf_timers_addr(),
607 PerfClassTraceTime::CLASS_LINK); 607 PerfClassTraceTime::CLASS_LINK);
608 608
609 // verification & rewriting 609 // verification & rewriting
610 { 610 {
611 volatile oop init_lock = this_oop->init_lock(); 611 oop init_lock = this_oop->init_lock();
612 ObjectLocker ol(init_lock, THREAD); 612 ObjectLocker ol(init_lock, THREAD);
613 // rewritten will have been set if loader constraint error found 613 // rewritten will have been set if loader constraint error found
614 // on an earlier link attempt 614 // on an earlier link attempt
615 // don't verify or rewrite if already rewritten 615 // don't verify or rewrite if already rewritten
616 616
729 bool wait = false; 729 bool wait = false;
730 730
731 // refer to the JVM book page 47 for description of steps 731 // refer to the JVM book page 47 for description of steps
732 // Step 1 732 // Step 1
733 { 733 {
734 volatile oop init_lock = this_oop->init_lock(); 734 oop init_lock = this_oop->init_lock();
735 ObjectLocker ol(init_lock, THREAD); 735 ObjectLocker ol(init_lock, THREAD);
736 736
737 Thread *self = THREAD; // it's passed the current thread 737 Thread *self = THREAD; // it's passed the current thread
738 738
739 // Step 2 739 // Step 2
877 instanceKlassHandle kh(THREAD, this); 877 instanceKlassHandle kh(THREAD, this);
878 set_initialization_state_and_notify_impl(kh, state, CHECK); 878 set_initialization_state_and_notify_impl(kh, state, CHECK);
879 } 879 }
880 880
881 void InstanceKlass::set_initialization_state_and_notify_impl(instanceKlassHandle this_oop, ClassState state, TRAPS) { 881 void InstanceKlass::set_initialization_state_and_notify_impl(instanceKlassHandle this_oop, ClassState state, TRAPS) {
882 volatile oop init_lock = this_oop->init_lock(); 882 oop init_lock = this_oop->init_lock();
883 ObjectLocker ol(init_lock, THREAD); 883 ObjectLocker ol(init_lock, THREAD);
884 this_oop->set_init_state(state); 884 this_oop->set_init_state(state);
885 ol.notify_all(CHECK); 885 ol.notify_all(CHECK);
886 } 886 }
887 887

mercurial