7185614: NMT ON: "check by caller" assertion failed on nsk ThreadMXBean test

Wed, 01 Aug 2012 17:19:30 -0400

author
zgu
date
Wed, 01 Aug 2012 17:19:30 -0400
changeset 3986
4acebbe310e1
parent 3945
fe94b4e7212b
child 3987
b27675afea11

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

src/share/vm/services/memSnapshot.cpp file | annotate | diff | comparison | revisions
src/share/vm/services/memSnapshot.hpp file | annotate | diff | comparison | revisions
src/share/vm/services/memTrackWorker.cpp file | annotate | diff | comparison | revisions
src/share/vm/services/memTracker.hpp file | annotate | diff | comparison | revisions
     1.1 --- a/src/share/vm/services/memSnapshot.cpp	Mon Jul 23 14:28:38 2012 -0700
     1.2 +++ b/src/share/vm/services/memSnapshot.cpp	Wed Aug 01 17:19:30 2012 -0400
     1.3 @@ -344,7 +344,7 @@
     1.4            // due to platform dependent behaviors. On some platforms, we see uncommit/release
     1.5            // native thread stack, but some, we don't.
     1.6            if (!cur_vm->is_uncommit_record() && !cur_vm->is_deallocation_record()) {
     1.7 -            ShouldNotReachHere();
     1.8 +            fatal(err_msg("Should not reach here, pointer flags = [%x]", cur_vm->flags()));
     1.9            }
    1.10  #endif
    1.11          }
     2.1 --- a/src/share/vm/services/memSnapshot.hpp	Mon Jul 23 14:28:38 2012 -0700
     2.2 +++ b/src/share/vm/services/memSnapshot.hpp	Wed Aug 01 17:19:30 2012 -0400
     2.3 @@ -63,13 +63,13 @@
     2.4        MemPointer* p1 = (MemPointer*)ptr;
     2.5        MemPointer* p2 = (MemPointer*)_array->at(_pos - 1);
     2.6        assert(!is_dup_pointer(p1, p2),
     2.7 -        "dup pointer");
     2.8 +        err_msg("duplicated pointer, flag = [%x]", (unsigned int)((MemPointerRecord*)p1)->flags()));
     2.9      }
    2.10       if (_pos < _array->length() -1) {
    2.11        MemPointer* p1 = (MemPointer*)ptr;
    2.12        MemPointer* p2 = (MemPointer*)_array->at(_pos + 1);
    2.13        assert(!is_dup_pointer(p1, p2),
    2.14 -        "dup pointer");
    2.15 +        err_msg("duplicated pointer, flag = [%x]", (unsigned int)((MemPointerRecord*)p1)->flags()));
    2.16       }
    2.17      return _array->insert_at(ptr, _pos);
    2.18    }
    2.19 @@ -79,14 +79,14 @@
    2.20        MemPointer* p1 = (MemPointer*)ptr;
    2.21        MemPointer* p2 = (MemPointer*)_array->at(_pos - 1);
    2.22        assert(!is_dup_pointer(p1, p2),
    2.23 -        "dup pointer");
    2.24 +        err_msg("duplicated pointer, flag = [%x]", (unsigned int)((MemPointerRecord*)p1)->flags()));
    2.25      }
    2.26      if (_pos < _array->length() - 1) {
    2.27        MemPointer* p1 = (MemPointer*)ptr;
    2.28        MemPointer* p2 = (MemPointer*)_array->at(_pos + 1);
    2.29  
    2.30        assert(!is_dup_pointer(p1, p2),
    2.31 -        "dup pointer");
    2.32 +        err_msg("duplicated pointer, flag = [%x]", (unsigned int)((MemPointerRecord*)p1)->flags()));
    2.33       }
    2.34      if (_array->insert_at(ptr, _pos + 1)) {
    2.35        _pos ++;
     3.1 --- a/src/share/vm/services/memTrackWorker.cpp	Mon Jul 23 14:28:38 2012 -0700
     3.2 +++ b/src/share/vm/services/memTrackWorker.cpp	Wed Aug 01 17:19:30 2012 -0400
     3.3 @@ -99,9 +99,11 @@
     3.4      }
     3.5      if (rec != NULL) {
     3.6        // merge the recorder into staging area
     3.7 -      bool result = snapshot->merge(rec);
     3.8 -      assert(result, "merge failed");
     3.9 -      debug_only(_merge_count ++;)
    3.10 +      if (!snapshot->merge(rec)) {
    3.11 +        MemTracker::shutdown(MemTracker::NMT_out_of_memory);
    3.12 +      } else {
    3.13 +        NOT_PRODUCT(_merge_count ++;)
    3.14 +      }
    3.15        MemTracker::release_thread_recorder(rec);
    3.16      } else {
    3.17        // no more recorder to merge, promote staging area
    3.18 @@ -129,7 +131,7 @@
    3.19    }
    3.20    assert(MemTracker::shutdown_in_progress(), "just check");
    3.21  
    3.22 -  // transites to final shutdown
    3.23 +  // transits to final shutdown
    3.24    MemTracker::final_shutdown();
    3.25  }
    3.26  
     4.1 --- a/src/share/vm/services/memTracker.hpp	Mon Jul 23 14:28:38 2012 -0700
     4.2 +++ b/src/share/vm/services/memTracker.hpp	Wed Aug 01 17:19:30 2012 -0400
     4.3 @@ -184,7 +184,6 @@
     4.4    // record a 'malloc' call
     4.5    static inline void record_malloc(address addr, size_t size, MEMFLAGS flags,
     4.6                              address pc = 0, Thread* thread = NULL) {
     4.7 -    assert(is_on(), "check by caller");
     4.8      if (NMT_CAN_TRACK(flags)) {
     4.9        create_memory_record(addr, (flags|MemPointerRecord::malloc_tag()), size, pc, thread);
    4.10      }
    4.11 @@ -285,7 +284,6 @@
    4.12  
    4.13    // retrieve global snapshot
    4.14    static MemSnapshot* get_snapshot() {
    4.15 -    assert(is_on(), "native memory tracking is off");
    4.16      if (shutdown_in_progress()) {
    4.17        return NULL;
    4.18      }

mercurial