480 481 GrowableArray <Klass*>* list = java_lang_Class::fixup_mirror_list(); 482 int list_length = list->length(); 483 for (int i = 0; i < list_length; i++) { 484 Klass* k = list->at(i); 485 assert(k->is_klass(), "List should only hold classes"); 486 EXCEPTION_MARK; 487 KlassHandle kh(THREAD, k); 488 java_lang_Class::fixup_mirror(kh, CATCH); 489 } 490 delete java_lang_Class::fixup_mirror_list(); 491 java_lang_Class::set_fixup_mirror_list(NULL); 492 } 493 494 #define assert_pll_locked(test) \ 495 assert(Heap_lock->test(), "Reference pending list access requires lock") 496 497 #define assert_pll_ownership() assert_pll_locked(owned_by_self) 498 499 oop Universe::reference_pending_list() { 500 assert_pll_ownership(); 501 return _reference_pending_list; 502 } 503 504 void Universe::set_reference_pending_list(oop list) { 505 assert_pll_ownership(); 506 _reference_pending_list = list; 507 } 508 509 bool Universe::has_reference_pending_list() { 510 assert_pll_ownership(); 511 return _reference_pending_list != NULL; 512 } 513 514 oop Universe::swap_reference_pending_list(oop list) { 515 assert_pll_locked(is_locked); 516 return (oop)Atomic::xchg_ptr(list, &_reference_pending_list); 517 } 518 519 #undef assert_pll_locked 520 #undef assert_pll_ownership | 480 481 GrowableArray <Klass*>* list = java_lang_Class::fixup_mirror_list(); 482 int list_length = list->length(); 483 for (int i = 0; i < list_length; i++) { 484 Klass* k = list->at(i); 485 assert(k->is_klass(), "List should only hold classes"); 486 EXCEPTION_MARK; 487 KlassHandle kh(THREAD, k); 488 java_lang_Class::fixup_mirror(kh, CATCH); 489 } 490 delete java_lang_Class::fixup_mirror_list(); 491 java_lang_Class::set_fixup_mirror_list(NULL); 492 } 493 494 #define assert_pll_locked(test) \ 495 assert(Heap_lock->test(), "Reference pending list access requires lock") 496 497 #define assert_pll_ownership() assert_pll_locked(owned_by_self) 498 499 oop Universe::reference_pending_list() { 500 if (Thread::current()->is_VM_thread()) { 501 assert_pll_locked(is_locked); 502 } else { 503 assert_pll_ownership(); 504 } 505 return _reference_pending_list; 506 } 507 508 void Universe::set_reference_pending_list(oop list) { 509 assert_pll_ownership(); 510 _reference_pending_list = list; 511 } 512 513 bool Universe::has_reference_pending_list() { 514 assert_pll_ownership(); 515 return _reference_pending_list != NULL; 516 } 517 518 oop Universe::swap_reference_pending_list(oop list) { 519 assert_pll_locked(is_locked); 520 return (oop)Atomic::xchg_ptr(list, &_reference_pending_list); 521 } 522 523 #undef assert_pll_locked 524 #undef assert_pll_ownership |