< 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 >