864 // Callers should be aware that an entry could be added just after |
864 // Callers should be aware that an entry could be added just after |
865 // _dictionary->bucket(index) is read here, so the caller will not see |
865 // _dictionary->bucket(index) is read here, so the caller will not see |
866 // the new entry. |
866 // the new entry. |
867 |
867 |
868 Klass* SystemDictionary::find(Symbol* class_name, |
868 Klass* SystemDictionary::find(Symbol* class_name, |
869 Handle class_loader, |
869 Handle class_loader, |
870 Handle protection_domain, |
870 Handle protection_domain, |
871 TRAPS) { |
871 TRAPS) { |
872 |
872 |
873 // UseNewReflection |
873 // UseNewReflection |
874 // The result of this call should be consistent with the result |
874 // The result of this call should be consistent with the result |
875 // of the call to resolve_instance_class_or_null(). |
875 // of the call to resolve_instance_class_or_null(). |
876 // See evaluation 6790209 and 4474172 for more details. |
876 // See evaluation 6790209 and 4474172 for more details. |
877 class_loader = Handle(THREAD, java_lang_ClassLoader::non_reflection_class_loader(class_loader())); |
877 class_loader = Handle(THREAD, java_lang_ClassLoader::non_reflection_class_loader(class_loader())); |
878 ClassLoaderData* loader_data = register_loader(class_loader, CHECK_NULL); |
878 ClassLoaderData* loader_data = ClassLoaderData::class_loader_data_or_null(class_loader()); |
|
879 |
|
880 if (loader_data == NULL) { |
|
881 // If the ClassLoaderData has not been setup, |
|
882 // then the class loader has no entries in the dictionary. |
|
883 return NULL; |
|
884 } |
879 |
885 |
880 unsigned int d_hash = dictionary()->compute_hash(class_name, loader_data); |
886 unsigned int d_hash = dictionary()->compute_hash(class_name, loader_data); |
881 int d_index = dictionary()->hash_to_index(d_hash); |
887 int d_index = dictionary()->hash_to_index(d_hash); |
882 |
888 |
883 { |
889 { |