Skip to content

Commit 47990cf

Browse files
committed
Fix mutex locking
1 parent 3c8b486 commit 47990cf

File tree

3 files changed

+10
-8
lines changed

3 files changed

+10
-8
lines changed

openjdk/share/mmtkHeap.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,7 @@ MMTkHeap* MMTkHeap::_heap = NULL;
7777
MMTkHeap::MMTkHeap() :
7878
CollectedHeap(),
7979
_n_workers(0),
80-
_gc_lock(new Monitor(Mutex::safepoint, "MMTkHeap::_gc_lock", true)),
80+
_gc_lock(new Monitor(Mutex::nosafepoint, "MMTkHeap::_gc_lock", true)),
8181
_num_root_scan_tasks(0),
8282
_soft_ref_policy(),
8383
_last_gc_time(0)

openjdk/share/mmtkUpcalls.cpp

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -94,6 +94,15 @@ static void mmtk_resume_mutators(void *tls) {
9494
MutexLocker locker(MMTkHeap::heap()->gc_lock(), Mutex::_no_safepoint_check_flag);
9595
MMTkHeap::heap()->gc_lock()->notify_all();
9696
}
97+
98+
log_debug(gc)("Notifying mutators blocking on Heap_lock for reference pending list...");
99+
// Note: That's the ReferenceHandler thread.
100+
{
101+
MutexLocker x(Heap_lock, Mutex::_no_safepoint_check_flag);
102+
if (Universe::has_reference_pending_list()) {
103+
Heap_lock->notify_all();
104+
}
105+
}
97106
}
98107

99108
static const int GC_THREAD_KIND_WORKER = 1;

openjdk/share/mmtkVMCompanionThread.cpp

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -163,11 +163,4 @@ void MMTkVMCompanionThread::do_mmtk_stw_operation() {
163163
log_trace(gc)("do_mmtk_stw_operation: Reached _thread_resumed state. Notifying...");
164164
_lock->notify_all();
165165
}
166-
167-
{
168-
MutexLocker x(Heap_lock, Mutex::_no_safepoint_check_flag);
169-
if (Universe::has_reference_pending_list()) {
170-
Heap_lock->notify_all();
171-
}
172-
}
173166
}

0 commit comments

Comments
 (0)