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();