# HG changeset patch # User zgu # Date 1343855970 14400 # Node ID 4acebbe310e1bd868c96efa3d50b60a67b69f5e4 # Parent fe94b4e7212b1f6a01ad1a0ebe0268d6781f8267 7185614: NMT ON: "check by caller" assertion failed on nsk ThreadMXBean test 7187429: NMT ON: Merge failure should cause NMT to shutdown Summary: Fixed NMT assertion failures Reviewed-by: acorn, kvn diff -r fe94b4e7212b -r 4acebbe310e1 src/share/vm/services/memSnapshot.cpp --- a/src/share/vm/services/memSnapshot.cpp Mon Jul 23 14:28:38 2012 -0700 +++ b/src/share/vm/services/memSnapshot.cpp Wed Aug 01 17:19:30 2012 -0400 @@ -344,7 +344,7 @@ // due to platform dependent behaviors. On some platforms, we see uncommit/release // native thread stack, but some, we don't. if (!cur_vm->is_uncommit_record() && !cur_vm->is_deallocation_record()) { - ShouldNotReachHere(); + fatal(err_msg("Should not reach here, pointer flags = [%x]", cur_vm->flags())); } #endif } diff -r fe94b4e7212b -r 4acebbe310e1 src/share/vm/services/memSnapshot.hpp --- a/src/share/vm/services/memSnapshot.hpp Mon Jul 23 14:28:38 2012 -0700 +++ b/src/share/vm/services/memSnapshot.hpp Wed Aug 01 17:19:30 2012 -0400 @@ -63,13 +63,13 @@ MemPointer* p1 = (MemPointer*)ptr; MemPointer* p2 = (MemPointer*)_array->at(_pos - 1); assert(!is_dup_pointer(p1, p2), - "dup pointer"); + err_msg("duplicated pointer, flag = [%x]", (unsigned int)((MemPointerRecord*)p1)->flags())); } if (_pos < _array->length() -1) { MemPointer* p1 = (MemPointer*)ptr; MemPointer* p2 = (MemPointer*)_array->at(_pos + 1); assert(!is_dup_pointer(p1, p2), - "dup pointer"); + err_msg("duplicated pointer, flag = [%x]", (unsigned int)((MemPointerRecord*)p1)->flags())); } return _array->insert_at(ptr, _pos); } @@ -79,14 +79,14 @@ MemPointer* p1 = (MemPointer*)ptr; MemPointer* p2 = (MemPointer*)_array->at(_pos - 1); assert(!is_dup_pointer(p1, p2), - "dup pointer"); + err_msg("duplicated pointer, flag = [%x]", (unsigned int)((MemPointerRecord*)p1)->flags())); } if (_pos < _array->length() - 1) { MemPointer* p1 = (MemPointer*)ptr; MemPointer* p2 = (MemPointer*)_array->at(_pos + 1); assert(!is_dup_pointer(p1, p2), - "dup pointer"); + err_msg("duplicated pointer, flag = [%x]", (unsigned int)((MemPointerRecord*)p1)->flags())); } if (_array->insert_at(ptr, _pos + 1)) { _pos ++; diff -r fe94b4e7212b -r 4acebbe310e1 src/share/vm/services/memTrackWorker.cpp --- a/src/share/vm/services/memTrackWorker.cpp Mon Jul 23 14:28:38 2012 -0700 +++ b/src/share/vm/services/memTrackWorker.cpp Wed Aug 01 17:19:30 2012 -0400 @@ -99,9 +99,11 @@ } if (rec != NULL) { // merge the recorder into staging area - bool result = snapshot->merge(rec); - assert(result, "merge failed"); - debug_only(_merge_count ++;) + if (!snapshot->merge(rec)) { + MemTracker::shutdown(MemTracker::NMT_out_of_memory); + } else { + NOT_PRODUCT(_merge_count ++;) + } MemTracker::release_thread_recorder(rec); } else { // no more recorder to merge, promote staging area @@ -129,7 +131,7 @@ } assert(MemTracker::shutdown_in_progress(), "just check"); - // transites to final shutdown + // transits to final shutdown MemTracker::final_shutdown(); } diff -r fe94b4e7212b -r 4acebbe310e1 src/share/vm/services/memTracker.hpp --- a/src/share/vm/services/memTracker.hpp Mon Jul 23 14:28:38 2012 -0700 +++ b/src/share/vm/services/memTracker.hpp Wed Aug 01 17:19:30 2012 -0400 @@ -184,7 +184,6 @@ // record a 'malloc' call static inline void record_malloc(address addr, size_t size, MEMFLAGS flags, address pc = 0, Thread* thread = NULL) { - assert(is_on(), "check by caller"); if (NMT_CAN_TRACK(flags)) { create_memory_record(addr, (flags|MemPointerRecord::malloc_tag()), size, pc, thread); } @@ -285,7 +284,6 @@ // retrieve global snapshot static MemSnapshot* get_snapshot() { - assert(is_on(), "native memory tracking is off"); if (shutdown_in_progress()) { return NULL; }