Skip to content

Commit d3f2176

Browse files
committed
Enqueue reference (slow)
1 parent f6b7614 commit d3f2176

File tree

2 files changed

+11
-0
lines changed

2 files changed

+11
-0
lines changed

openjdk/mmtkUpcalls.cpp

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -321,6 +321,11 @@ static void mmtk_prepare_for_roots_re_scanning() {
321321

322322
static void mmtk_enqueue_reference(void* object) {
323323
printf("enqueue object: %p\n", object);
324+
MutexLocker x(Heap_lock);
325+
oop reff = (oop) object;
326+
oop old = Universe::swap_reference_pending_list(reff);
327+
HeapAccess<AS_NO_KEEPALIVE>::oop_store_at(reff, java_lang_ref_Reference::discovered_offset, old);
328+
assert(Universe::has_reference_pending_list(), "Reference pending list is empty after swap");
324329
}
325330

326331
OpenJDK_Upcalls mmtk_upcalls = {

openjdk/mmtkVMCompanionThread.cpp

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,12 @@ void MMTkVMCompanionThread::run() {
7575
_reached_state = _threads_resumed;
7676
_lock->notify_all();
7777
}
78+
{
79+
MutexLocker x(Heap_lock);
80+
if (Universe::has_reference_pending_list()) {
81+
Heap_lock->notify_all();
82+
}
83+
}
7884
}
7985
}
8086

0 commit comments

Comments
 (0)