src/hotspot/share/classfile/classLoaderDataGraph.cpp
changeset 52140 3a168f782e80
parent 52014 1aa9beac610e
child 52141 de6dc206a92b
equal deleted inserted replaced
52139:5a2af44ecb83 52140:3a168f782e80
   229   ClassLoaderData* loader_data = add_to_graph(loader, is_unsafe_anonymous);
   229   ClassLoaderData* loader_data = add_to_graph(loader, is_unsafe_anonymous);
   230   return loader_data;
   230   return loader_data;
   231 }
   231 }
   232 
   232 
   233 void ClassLoaderDataGraph::cld_do(CLDClosure* cl) {
   233 void ClassLoaderDataGraph::cld_do(CLDClosure* cl) {
   234   assert_locked_or_safepoint(ClassLoaderDataGraph_lock);
   234   assert_locked_or_safepoint_weak(ClassLoaderDataGraph_lock);
   235   for (ClassLoaderData* cld = _head;  cld != NULL; cld = cld->_next) {
   235   for (ClassLoaderData* cld = _head;  cld != NULL; cld = cld->_next) {
   236     cl->do_cld(cld);
   236     cl->do_cld(cld);
   237   }
   237   }
   238 }
   238 }
   239 
   239 
   240 void ClassLoaderDataGraph::cld_unloading_do(CLDClosure* cl) {
   240 void ClassLoaderDataGraph::cld_unloading_do(CLDClosure* cl) {
   241   assert_locked_or_safepoint(ClassLoaderDataGraph_lock);
   241   assert_locked_or_safepoint_weak(ClassLoaderDataGraph_lock);
   242   // Only walk the head until any clds not purged from prior unloading
   242   // Only walk the head until any clds not purged from prior unloading
   243   // (CMS doesn't purge right away).
   243   // (CMS doesn't purge right away).
   244   for (ClassLoaderData* cld = _unloading; cld != _saved_unloading; cld = cld->next()) {
   244   for (ClassLoaderData* cld = _unloading; cld != _saved_unloading; cld = cld->next()) {
   245     assert(cld->is_unloading(), "invariant");
   245     assert(cld->is_unloading(), "invariant");
   246     cl->do_cld(cld);
   246     cl->do_cld(cld);
   247   }
   247   }
   248 }
   248 }
   249 
   249 
   250 void ClassLoaderDataGraph::roots_cld_do(CLDClosure* strong, CLDClosure* weak) {
   250 void ClassLoaderDataGraph::roots_cld_do(CLDClosure* strong, CLDClosure* weak) {
   251   assert_locked_or_safepoint(ClassLoaderDataGraph_lock);
   251   assert_locked_or_safepoint_weak(ClassLoaderDataGraph_lock);
   252   for (ClassLoaderData* cld = _head;  cld != NULL; cld = cld->_next) {
   252   for (ClassLoaderData* cld = _head;  cld != NULL; cld = cld->_next) {
   253     CLDClosure* closure = cld->keep_alive() ? strong : weak;
   253     CLDClosure* closure = cld->keep_alive() ? strong : weak;
   254     if (closure != NULL) {
   254     if (closure != NULL) {
   255       closure->do_cld(cld);
   255       closure->do_cld(cld);
   256     }
   256     }
   257   }
   257   }
   258 }
   258 }
   259 
   259 
   260 void ClassLoaderDataGraph::always_strong_cld_do(CLDClosure* cl) {
   260 void ClassLoaderDataGraph::always_strong_cld_do(CLDClosure* cl) {
   261   assert_locked_or_safepoint(ClassLoaderDataGraph_lock);
   261   assert_locked_or_safepoint_weak(ClassLoaderDataGraph_lock);
   262   if (ClassUnloading) {
   262   if (ClassUnloading) {
   263     roots_cld_do(cl, NULL);
   263     roots_cld_do(cl, NULL);
   264   } else {
   264   } else {
   265     cld_do(cl);
   265     cld_do(cl);
   266   }
   266   }