src/share/vm/services/memTracker.cpp

changeset 3937
d5bc62fcfac7
parent 3935
7e5976e66c62
parent 3936
f1f45dddb0bd
child 3939
58a04a45a549
     1.1 --- a/src/share/vm/services/memTracker.cpp	Thu Jul 19 09:05:42 2012 -0400
     1.2 +++ b/src/share/vm/services/memTracker.cpp	Thu Jul 19 09:10:12 2012 -0400
     1.3 @@ -54,7 +54,7 @@
     1.4  MemRecorder*                    MemTracker::_global_recorder = NULL;
     1.5  MemSnapshot*                    MemTracker::_snapshot = NULL;
     1.6  MemBaseline                     MemTracker::_baseline;
     1.7 -Mutex                           MemTracker::_query_lock(Monitor::native, "NMT_queryLock");
     1.8 +Mutex*                          MemTracker::_query_lock = NULL;
     1.9  volatile MemRecorder*           MemTracker::_merge_pending_queue = NULL;
    1.10  volatile MemRecorder*           MemTracker::_pooled_recorders = NULL;
    1.11  MemTrackWorker*                 MemTracker::_worker_thread = NULL;
    1.12 @@ -89,6 +89,12 @@
    1.13        return;
    1.14      }
    1.15  
    1.16 +    _query_lock = new (std::nothrow) Mutex(Monitor::max_nonleaf, "NMT_queryLock");
    1.17 +    if (_query_lock == NULL) {
    1.18 +      shutdown(NMT_out_of_memory);
    1.19 +      return;
    1.20 +    }
    1.21 +
    1.22      debug_only(_main_thread_tid = os::current_thread_id();)
    1.23      _state = NMT_bootstrapping_single_thread;
    1.24      NMT_track_callsite = (_tracking_level == NMT_detail && can_walk_stack());
    1.25 @@ -164,7 +170,7 @@
    1.26    {
    1.27      // shared baseline and snapshot are the only objects needed to
    1.28      // create query results
    1.29 -    MutexLockerEx locker(&_query_lock, true);
    1.30 +    MutexLockerEx locker(_query_lock, true);
    1.31      // cleanup baseline data and snapshot
    1.32      _baseline.clear();
    1.33      delete _snapshot;
    1.34 @@ -536,7 +542,7 @@
    1.35  
    1.36  // baseline current memory snapshot
    1.37  bool MemTracker::baseline() {
    1.38 -  MutexLockerEx lock(&_query_lock, true);
    1.39 +  MutexLockerEx lock(_query_lock, true);
    1.40    MemSnapshot* snapshot = get_snapshot();
    1.41    if (snapshot != NULL) {
    1.42      return _baseline.baseline(*snapshot, false);
    1.43 @@ -547,7 +553,7 @@
    1.44  // print memory usage from current snapshot
    1.45  bool MemTracker::print_memory_usage(BaselineOutputer& out, size_t unit, bool summary_only) {
    1.46    MemBaseline  baseline;
    1.47 -  MutexLockerEx lock(&_query_lock, true);
    1.48 +  MutexLockerEx lock(_query_lock, true);
    1.49    MemSnapshot* snapshot = get_snapshot();
    1.50    if (snapshot != NULL && baseline.baseline(*snapshot, summary_only)) {
    1.51      BaselineReporter reporter(out, unit);
    1.52 @@ -559,7 +565,7 @@
    1.53  
    1.54  // compare memory usage between current snapshot and baseline
    1.55  bool MemTracker::compare_memory_usage(BaselineOutputer& out, size_t unit, bool summary_only) {
    1.56 -  MutexLockerEx lock(&_query_lock, true);
    1.57 +  MutexLockerEx lock(_query_lock, true);
    1.58    if (_baseline.baselined()) {
    1.59      MemBaseline baseline;
    1.60      MemSnapshot* snapshot = get_snapshot();

mercurial