< prev index next >

src/share/vm/classfile/classLoaderData.cpp

Print this page

        

*** 467,485 **** ClassLoaderDataGraphKlassIteratorStatic() : _current_loader_data(NULL), _current_class_entry(NULL) {} InstanceKlass* try_get_next_class() { assert(SafepointSynchronize::is_at_safepoint(), "only called at safepoint"); int max_classes = InstanceKlass::number_of_instance_classes(); ! for (int i = 0; i < max_classes; i++) { if (_current_class_entry != NULL) { Klass* k = _current_class_entry; _current_class_entry = _current_class_entry->next_link(); if (k->is_instance_klass()) { InstanceKlass* ik = InstanceKlass::cast(k); ! // Only return loaded classes if (ik->is_loaded()) { return ik; } } } else { --- 467,488 ---- ClassLoaderDataGraphKlassIteratorStatic() : _current_loader_data(NULL), _current_class_entry(NULL) {} InstanceKlass* try_get_next_class() { assert(SafepointSynchronize::is_at_safepoint(), "only called at safepoint"); int max_classes = InstanceKlass::number_of_instance_classes(); ! assert(max_classes > 0, "should not be called with no instance classes"); ! for (int i = 0; i < max_classes; ) { if (_current_class_entry != NULL) { Klass* k = _current_class_entry; _current_class_entry = _current_class_entry->next_link(); if (k->is_instance_klass()) { InstanceKlass* ik = InstanceKlass::cast(k); ! i++; // count all instance classes found ! // Not yet loaded classes are counted in max_classes ! // but only return loaded classes. if (ik->is_loaded()) { return ik; } } } else {
*** 493,505 **** } _current_class_entry = _current_loader_data->klasses(); } } ! // should never be reached: an InstanceKlass should be returned above ! ShouldNotReachHere(); ! return NULL; // Object_klass not even loaded? } // If the current class for the static iterator is a class being unloaded or // deallocated, adjust the current class. void adjust_saved_class(ClassLoaderData* cld) { --- 496,508 ---- } _current_class_entry = _current_loader_data->klasses(); } } ! // Should never be reached unless all instance classes have failed or are not fully loaded. ! // Caller handles NULL. ! return NULL; } // If the current class for the static iterator is a class being unloaded or // deallocated, adjust the current class. void adjust_saved_class(ClassLoaderData* cld) {
< prev index next >