comparison src/share/vm/classfile/loaderConstraints.cpp @ 1339:09ac706c2623

Merge
author asaha
date Wed, 24 Mar 2010 17:16:33 -0700
parents 0c3f888b7636 38836cf1d8d2
children cff162798819
comparison
equal deleted inserted replaced
1338:f5dd08ad65df 1339:09ac706c2623
428 free_entry(p2); 428 free_entry(p2);
429 return; 429 return;
430 } 430 }
431 431
432 432
433 void LoaderConstraintTable::verify(Dictionary* dictionary) { 433 void LoaderConstraintTable::verify(Dictionary* dictionary,
434 PlaceholderTable* placeholders) {
434 Thread *thread = Thread::current(); 435 Thread *thread = Thread::current();
435 for (int cindex = 0; cindex < _loader_constraint_size; cindex++) { 436 for (int cindex = 0; cindex < _loader_constraint_size; cindex++) {
436 for (LoaderConstraintEntry* probe = bucket(cindex); 437 for (LoaderConstraintEntry* probe = bucket(cindex);
437 probe != NULL; 438 probe != NULL;
438 probe = probe->next()) { 439 probe = probe->next()) {
443 symbolHandle name (thread, ik->name()); 444 symbolHandle name (thread, ik->name());
444 Handle loader(thread, ik->class_loader()); 445 Handle loader(thread, ik->class_loader());
445 unsigned int d_hash = dictionary->compute_hash(name, loader); 446 unsigned int d_hash = dictionary->compute_hash(name, loader);
446 int d_index = dictionary->hash_to_index(d_hash); 447 int d_index = dictionary->hash_to_index(d_hash);
447 klassOop k = dictionary->find_class(d_index, d_hash, name, loader); 448 klassOop k = dictionary->find_class(d_index, d_hash, name, loader);
448 guarantee(k == probe->klass(), "klass should be in dictionary"); 449 if (k != NULL) {
450 // We found the class in the system dictionary, so we should
451 // make sure that the klassOop matches what we already have.
452 guarantee(k == probe->klass(), "klass should be in dictionary");
453 } else {
454 // If we don't find the class in the system dictionary, it
455 // has to be in the placeholders table.
456 unsigned int p_hash = placeholders->compute_hash(name, loader);
457 int p_index = placeholders->hash_to_index(p_hash);
458 PlaceholderEntry* entry = placeholders->get_entry(p_index, p_hash,
459 name, loader);
460
461 // The instanceKlass might not be on the entry, so the only
462 // thing we can check here is whether we were successful in
463 // finding the class in the placeholders table.
464 guarantee(entry != NULL, "klass should be in the placeholders");
465 }
449 } 466 }
450 for (int n = 0; n< probe->num_loaders(); n++) { 467 for (int n = 0; n< probe->num_loaders(); n++) {
451 guarantee(probe->loader(n)->is_oop_or_null(), "should be oop"); 468 guarantee(probe->loader(n)->is_oop_or_null(), "should be oop");
452 } 469 }
453 } 470 }