hotspot/src/share/vm/classfile/classLoaderData.cpp
changeset 46464 6432a858a220
parent 46420 227f72691ac1
child 46701 f559541c0daa
--- a/hotspot/src/share/vm/classfile/classLoaderData.cpp	Tue May 16 09:33:49 2017 -0400
+++ b/hotspot/src/share/vm/classfile/classLoaderData.cpp	Tue May 16 19:36:55 2017 -0400
@@ -270,9 +270,8 @@
 }
 
 void ClassLoaderData::loaded_classes_do(KlassClosure* klass_closure) {
-  // Lock to avoid classes being modified/added/removed during iteration
-  MutexLockerEx ml(metaspace_lock(),  Mutex::_no_safepoint_check_flag);
-  for (Klass* k = _klasses; k != NULL; k = k->next_link()) {
+  // Lock-free access requires load_ptr_acquire
+  for (Klass* k = load_ptr_acquire(&_klasses); k != NULL; k = k->next_link()) {
     // Do not filter ArrayKlass oops here...
     if (k->is_array_klass() || (k->is_instance_klass() && InstanceKlass::cast(k)->is_loaded())) {
       klass_closure->do_klass(k);