comparison src/share/vm/services/virtualMemoryTracker.cpp @ 20553:417e3b8d04c5

8059100: SIGSEGV VirtualMemoryTracker::remove_released_region Summary: Disallow increasing native memory tracking level Reviewed-by: hseigel, ctornqvi, gtriantafill
author coleenp
date Fri, 10 Oct 2014 19:36:12 +0000
parents 3adc0e278f49
children
comparison
equal deleted inserted replaced
20547:fffbcc20bf61 20553:417e3b8d04c5
441 441
442 442
443 bool VirtualMemoryTracker::walk_virtual_memory(VirtualMemoryWalker* walker) { 443 bool VirtualMemoryTracker::walk_virtual_memory(VirtualMemoryWalker* walker) {
444 assert(_reserved_regions != NULL, "Sanity check"); 444 assert(_reserved_regions != NULL, "Sanity check");
445 ThreadCritical tc; 445 ThreadCritical tc;
446 LinkedListNode<ReservedMemoryRegion>* head = _reserved_regions->head(); 446 // Check that the _reserved_regions haven't been deleted.
447 while (head != NULL) { 447 if (_reserved_regions != NULL) {
448 const ReservedMemoryRegion* rgn = head->peek(); 448 LinkedListNode<ReservedMemoryRegion>* head = _reserved_regions->head();
449 if (!walker->do_allocation_site(rgn)) { 449 while (head != NULL) {
450 return false; 450 const ReservedMemoryRegion* rgn = head->peek();
451 } 451 if (!walker->do_allocation_site(rgn)) {
452 head = head->next(); 452 return false;
453 } 453 }
454 head = head->next();
455 }
456 }
454 return true; 457 return true;
455 } 458 }
456 459
457 // Transition virtual memory tracking level. 460 // Transition virtual memory tracking level.
458 bool VirtualMemoryTracker::transition(NMT_TrackingLevel from, NMT_TrackingLevel to) { 461 bool VirtualMemoryTracker::transition(NMT_TrackingLevel from, NMT_TrackingLevel to) {
459 if (from == NMT_minimal) { 462 assert (from != NMT_minimal, "cannot convert from the lowest tracking level to anything");
460 assert(to == NMT_summary || to == NMT_detail, "Just check"); 463 if (to == NMT_minimal) {
461 VirtualMemorySummary::reset();
462 } else if (to == NMT_minimal) {
463 assert(from == NMT_summary || from == NMT_detail, "Just check"); 464 assert(from == NMT_summary || from == NMT_detail, "Just check");
464 // Clean up virtual memory tracking data structures. 465 // Clean up virtual memory tracking data structures.
465 ThreadCritical tc; 466 ThreadCritical tc;
467 // Check for potential race with other thread calling transition
466 if (_reserved_regions != NULL) { 468 if (_reserved_regions != NULL) {
467 delete _reserved_regions; 469 delete _reserved_regions;
468 _reserved_regions = NULL; 470 _reserved_regions = NULL;
469 } 471 }
470 } 472 }