< prev index next >

src/share/vm/classfile/classLoaderData.cpp

Print this page

        

@@ -203,14 +203,15 @@
     assert(k != k->next_link(), "no loops!");
   }
 }
 
 void ClassLoaderData::modules_do(void f(ModuleEntry*)) {
-  assert_locked_or_safepoint(Module_lock);
-  if (_modules != NULL) {
-    for (int i = 0; i < _modules->table_size(); i++) {
-      for (ModuleEntry* entry = _modules->bucket(i);
+  // Lock-free access requires load_ptr_acquire
+  ModuleEntryTable* modules = load_ptr_acquire(&_modules);
+  if (modules != NULL) {
+    for (int i = 0; i < modules->table_size(); i++) {
+      for (ModuleEntry* entry = modules->bucket(i);
                               entry != NULL;
                               entry = entry->next()) {
         f(entry);
       }
     }
< prev index next >