Skip to content

Commit 72a9d0e

Browse files
authored
Workaround soft_ref_policy crash (#191)
Sometimes the VM will call methods of CollectedHeap::soft_ref_policy(). If it returns nullptr, the VM will crash for SIGSEGV in a subsequent method invocation on the returned nullptr. This is just a workaround because our soft reference processor is currently implemented in mmtk-core.
1 parent 6eebb4b commit 72a9d0e

File tree

2 files changed

+10
-4
lines changed

2 files changed

+10
-4
lines changed

openjdk/mmtkHeap.cpp

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -63,8 +63,14 @@ object iterator??!!
6363

6464
MMTkHeap* MMTkHeap::_heap = NULL;
6565

66-
MMTkHeap::MMTkHeap(MMTkCollectorPolicy* policy) : CollectedHeap(), _last_gc_time(0), _collector_policy(policy), _num_root_scan_tasks(0), _n_workers(0), _gc_lock(new Monitor(Mutex::safepoint, "MMTkHeap::_gc_lock", true, Monitor::_safepoint_check_sometimes))
67-
// , _par_state_string(StringTable::weak_storage())
66+
MMTkHeap::MMTkHeap(MMTkCollectorPolicy* policy) :
67+
CollectedHeap(),
68+
_last_gc_time(0),
69+
_collector_policy(policy),
70+
_num_root_scan_tasks(0),
71+
_n_workers(0),
72+
_gc_lock(new Monitor(Mutex::safepoint, "MMTkHeap::_gc_lock", true, Monitor::_safepoint_check_sometimes)),
73+
_soft_ref_policy()
6874
{
6975
_heap = this;
7076
}
@@ -255,7 +261,7 @@ void MMTkHeap::do_full_collection(bool clear_all_soft_refs) {//later when gc is
255261
// Return the CollectorPolicy for the heap
256262
CollectorPolicy* MMTkHeap::collector_policy() const {return _collector_policy;}//OK
257263

258-
SoftRefPolicy* MMTkHeap::soft_ref_policy() {return _soft_ref_policy;}//OK
264+
SoftRefPolicy* MMTkHeap::soft_ref_policy() {return &_soft_ref_policy;}//OK
259265

260266
GrowableArray<GCMemoryManager*> MMTkHeap::memory_managers() {//may cause error
261267

openjdk/mmtkHeap.hpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ class MemoryPool;
4848
class MMTkVMCompanionThread;
4949
class MMTkHeap : public CollectedHeap {
5050
MMTkCollectorPolicy* _collector_policy;
51-
SoftRefPolicy* _soft_ref_policy;
51+
SoftRefPolicy _soft_ref_policy;
5252
MMTkMemoryPool* _mmtk_pool;
5353
GCMemoryManager* _mmtk_manager;
5454
HeapWord* _start;

0 commit comments

Comments
 (0)