--- a/hotspot/src/share/vm/services/memTracker.cpp Wed Jul 04 15:55:45 2012 -0400
+++ b/hotspot/src/share/vm/services/memTracker.cpp Mon Jul 16 14:10:34 2012 -0400
@@ -54,7 +54,7 @@
MemRecorder* MemTracker::_global_recorder = NULL;
MemSnapshot* MemTracker::_snapshot = NULL;
MemBaseline MemTracker::_baseline;
-Mutex MemTracker::_query_lock(Monitor::native, "NMT_queryLock");
+Mutex* MemTracker::_query_lock = NULL;
volatile MemRecorder* MemTracker::_merge_pending_queue = NULL;
volatile MemRecorder* MemTracker::_pooled_recorders = NULL;
MemTrackWorker* MemTracker::_worker_thread = NULL;
@@ -89,6 +89,12 @@
return;
}
+ _query_lock = new (std::nothrow) Mutex(Monitor::max_nonleaf, "NMT_queryLock");
+ if (_query_lock == NULL) {
+ shutdown(NMT_out_of_memory);
+ return;
+ }
+
debug_only(_main_thread_tid = os::current_thread_id();)
_state = NMT_bootstrapping_single_thread;
NMT_track_callsite = (_tracking_level == NMT_detail && can_walk_stack());
@@ -164,7 +170,7 @@
{
// shared baseline and snapshot are the only objects needed to
// create query results
- MutexLockerEx locker(&_query_lock, true);
+ MutexLockerEx locker(_query_lock, true);
// cleanup baseline data and snapshot
_baseline.clear();
delete _snapshot;
@@ -534,7 +540,7 @@
// baseline current memory snapshot
bool MemTracker::baseline() {
- MutexLockerEx lock(&_query_lock, true);
+ MutexLockerEx lock(_query_lock, true);
MemSnapshot* snapshot = get_snapshot();
if (snapshot != NULL) {
return _baseline.baseline(*snapshot, false);
@@ -545,7 +551,7 @@
// print memory usage from current snapshot
bool MemTracker::print_memory_usage(BaselineOutputer& out, size_t unit, bool summary_only) {
MemBaseline baseline;
- MutexLockerEx lock(&_query_lock, true);
+ MutexLockerEx lock(_query_lock, true);
MemSnapshot* snapshot = get_snapshot();
if (snapshot != NULL && baseline.baseline(*snapshot, summary_only)) {
BaselineReporter reporter(out, unit);
@@ -557,7 +563,7 @@
// compare memory usage between current snapshot and baseline
bool MemTracker::compare_memory_usage(BaselineOutputer& out, size_t unit, bool summary_only) {
- MutexLockerEx lock(&_query_lock, true);
+ MutexLockerEx lock(_query_lock, true);
if (_baseline.baselined()) {
MemBaseline baseline;
MemSnapshot* snapshot = get_snapshot();