188 MutexLockerEx ml(metaspace_lock(), Mutex::_no_safepoint_check_flag); 189 for (Klass* k = _klasses; k != NULL; k = k->next_link()) { 190 // Do not filter ArrayKlass oops here... 191 if (k->is_array_klass() || (k->is_instance_klass() && InstanceKlass::cast(k)->is_loaded())) { 192 klass_closure->do_klass(k); 193 } 194 } 195 } 196 197 void ClassLoaderData::classes_do(void f(InstanceKlass*)) { 198 // Lock-free access requires load_ptr_acquire 199 for (Klass* k = load_ptr_acquire(&_klasses); k != NULL; k = k->next_link()) { 200 if (k->is_instance_klass()) { 201 f(InstanceKlass::cast(k)); 202 } 203 assert(k != k->next_link(), "no loops!"); 204 } 205 } 206 207 void ClassLoaderData::modules_do(void f(ModuleEntry*)) { 208 assert_locked_or_safepoint(Module_lock); 209 if (_modules != NULL) { 210 for (int i = 0; i < _modules->table_size(); i++) { 211 for (ModuleEntry* entry = _modules->bucket(i); 212 entry != NULL; 213 entry = entry->next()) { 214 f(entry); 215 } 216 } 217 } 218 } 219 220 void ClassLoaderData::packages_do(void f(PackageEntry*)) { 221 // Lock-free access requires load_ptr_acquire 222 PackageEntryTable* packages = load_ptr_acquire(&_packages); 223 if (packages != NULL) { 224 for (int i = 0; i < packages->table_size(); i++) { 225 for (PackageEntry* entry = packages->bucket(i); 226 entry != NULL; 227 entry = entry->next()) { 228 f(entry); 229 } 230 } 231 } | 188 MutexLockerEx ml(metaspace_lock(), Mutex::_no_safepoint_check_flag); 189 for (Klass* k = _klasses; k != NULL; k = k->next_link()) { 190 // Do not filter ArrayKlass oops here... 191 if (k->is_array_klass() || (k->is_instance_klass() && InstanceKlass::cast(k)->is_loaded())) { 192 klass_closure->do_klass(k); 193 } 194 } 195 } 196 197 void ClassLoaderData::classes_do(void f(InstanceKlass*)) { 198 // Lock-free access requires load_ptr_acquire 199 for (Klass* k = load_ptr_acquire(&_klasses); k != NULL; k = k->next_link()) { 200 if (k->is_instance_klass()) { 201 f(InstanceKlass::cast(k)); 202 } 203 assert(k != k->next_link(), "no loops!"); 204 } 205 } 206 207 void ClassLoaderData::modules_do(void f(ModuleEntry*)) { 208 // Lock-free access requires load_ptr_acquire 209 ModuleEntryTable* modules = load_ptr_acquire(&_modules); 210 if (modules != NULL) { 211 for (int i = 0; i < modules->table_size(); i++) { 212 for (ModuleEntry* entry = modules->bucket(i); 213 entry != NULL; 214 entry = entry->next()) { 215 f(entry); 216 } 217 } 218 } 219 } 220 221 void ClassLoaderData::packages_do(void f(PackageEntry*)) { 222 // Lock-free access requires load_ptr_acquire 223 PackageEntryTable* packages = load_ptr_acquire(&_packages); 224 if (packages != NULL) { 225 for (int i = 0; i < packages->table_size(); i++) { 226 for (PackageEntry* entry = packages->bucket(i); 227 entry != NULL; 228 entry = entry->next()) { 229 f(entry); 230 } 231 } 232 } |