< prev index next >

src/hotspot/share/classfile/classLoaderDataGraph.cpp

Print this page
rev 52404 : imported patch 8213307-rmt-cleanup


 479 }
 480 #endif // PRODUCT
 481 
 482 bool ClassLoaderDataGraph::is_valid(ClassLoaderData* loader_data) {
 483   DEBUG_ONLY( if (!VMError::is_error_reported()) { assert_locked_or_safepoint(ClassLoaderDataGraph_lock); } )
 484   if (loader_data != NULL) {
 485     if (loader_data == ClassLoaderData::the_null_class_loader_data()) {
 486       return true;
 487     }
 488     for (ClassLoaderData* data = _head; data != NULL; data = data->next()) {
 489       if (loader_data == data) {
 490         return true;
 491       }
 492     }
 493   }
 494   return false;
 495 }
 496 
 497 // Move class loader data from main list to the unloaded list for unloading
 498 // and deallocation later.
 499 bool ClassLoaderDataGraph::do_unloading(bool do_cleaning) {
 500   assert_locked_or_safepoint(ClassLoaderDataGraph_lock);
 501 
 502   // Indicate whether safepoint cleanup is needed.
 503   _safepoint_cleanup_needed |= do_cleaning;
 504 
 505   ClassLoaderData* data = _head;
 506   ClassLoaderData* prev = NULL;
 507   bool seen_dead_loader = false;
 508   uint loaders_processed = 0;
 509   uint loaders_removed = 0;
 510 
 511   // Save previous _unloading pointer for CMS which may add to unloading list before
 512   // purging and we don't want to rewalk the previously unloaded class loader data.
 513   _saved_unloading = _unloading;
 514 
 515   data = _head;
 516   while (data != NULL) {
 517     if (data->is_alive()) {
 518       prev = data;
 519       data = data->next();
 520       loaders_processed++;
 521       continue;
 522     }
 523     seen_dead_loader = true;




 479 }
 480 #endif // PRODUCT
 481 
 482 bool ClassLoaderDataGraph::is_valid(ClassLoaderData* loader_data) {
 483   DEBUG_ONLY( if (!VMError::is_error_reported()) { assert_locked_or_safepoint(ClassLoaderDataGraph_lock); } )
 484   if (loader_data != NULL) {
 485     if (loader_data == ClassLoaderData::the_null_class_loader_data()) {
 486       return true;
 487     }
 488     for (ClassLoaderData* data = _head; data != NULL; data = data->next()) {
 489       if (loader_data == data) {
 490         return true;
 491       }
 492     }
 493   }
 494   return false;
 495 }
 496 
 497 // Move class loader data from main list to the unloaded list for unloading
 498 // and deallocation later.
 499 bool ClassLoaderDataGraph::do_unloading() {
 500   assert_locked_or_safepoint(ClassLoaderDataGraph_lock);
 501 
 502   // Indicate whether safepoint cleanup is needed.
 503   _safepoint_cleanup_needed = true;
 504 
 505   ClassLoaderData* data = _head;
 506   ClassLoaderData* prev = NULL;
 507   bool seen_dead_loader = false;
 508   uint loaders_processed = 0;
 509   uint loaders_removed = 0;
 510 
 511   // Save previous _unloading pointer for CMS which may add to unloading list before
 512   // purging and we don't want to rewalk the previously unloaded class loader data.
 513   _saved_unloading = _unloading;
 514 
 515   data = _head;
 516   while (data != NULL) {
 517     if (data->is_alive()) {
 518       prev = data;
 519       data = data->next();
 520       loaders_processed++;
 521       continue;
 522     }
 523     seen_dead_loader = true;


< prev index next >