1367
1368 curr = curr->_next;
1369 }
1370
1371 return array;
1372 }
1373
1374 #ifndef PRODUCT
1375 bool ClassLoaderDataGraph::contains_loader_data(ClassLoaderData* loader_data) {
1376 assert_locked_or_safepoint(ClassLoaderDataGraph_lock);
1377 for (ClassLoaderData* data = _head; data != NULL; data = data->next()) {
1378 if (loader_data == data) {
1379 return true;
1380 }
1381 }
1382
1383 return false;
1384 }
1385 #endif // PRODUCT
1386
1387 // Move class loader data from main list to the unloaded list for unloading
1388 // and deallocation later.
1389 bool ClassLoaderDataGraph::do_unloading(bool do_cleaning) {
1390 assert_locked_or_safepoint(ClassLoaderDataGraph_lock);
1391
1392 // Indicate whether safepoint cleanup is needed.
1393 _safepoint_cleanup_needed |= do_cleaning;
1394
1395 ClassLoaderData* data = _head;
1396 ClassLoaderData* prev = NULL;
1397 bool seen_dead_loader = false;
1398 uint loaders_processed = 0;
1399 uint loaders_removed = 0;
1400
1401 // Save previous _unloading pointer for CMS which may add to unloading list before
1402 // purging and we don't want to rewalk the previously unloaded class loader data.
1403 _saved_unloading = _unloading;
1404
1405 data = _head;
1406 while (data != NULL) {
|
1367
1368 curr = curr->_next;
1369 }
1370
1371 return array;
1372 }
1373
1374 #ifndef PRODUCT
1375 bool ClassLoaderDataGraph::contains_loader_data(ClassLoaderData* loader_data) {
1376 assert_locked_or_safepoint(ClassLoaderDataGraph_lock);
1377 for (ClassLoaderData* data = _head; data != NULL; data = data->next()) {
1378 if (loader_data == data) {
1379 return true;
1380 }
1381 }
1382
1383 return false;
1384 }
1385 #endif // PRODUCT
1386
1387 bool ClassLoaderDataGraph::is_valid(ClassLoaderData* loader_data) {
1388 if (loader_data == ClassLoaderData::the_null_class_loader_data()) {
1389 return true;
1390 }
1391 for (ClassLoaderData* data = _head; data != NULL; data = data->next()) {
1392 if (loader_data == data) {
1393 return true;
1394 }
1395 }
1396 return false;
1397 }
1398
1399 // Move class loader data from main list to the unloaded list for unloading
1400 // and deallocation later.
1401 bool ClassLoaderDataGraph::do_unloading(bool do_cleaning) {
1402 assert_locked_or_safepoint(ClassLoaderDataGraph_lock);
1403
1404 // Indicate whether safepoint cleanup is needed.
1405 _safepoint_cleanup_needed |= do_cleaning;
1406
1407 ClassLoaderData* data = _head;
1408 ClassLoaderData* prev = NULL;
1409 bool seen_dead_loader = false;
1410 uint loaders_processed = 0;
1411 uint loaders_removed = 0;
1412
1413 // Save previous _unloading pointer for CMS which may add to unloading list before
1414 // purging and we don't want to rewalk the previously unloaded class loader data.
1415 _saved_unloading = _unloading;
1416
1417 data = _head;
1418 while (data != NULL) {
|