OpenJDK / portola / portola
changeset 55123:934d68e9c45d
8224875: Shenandoah: ParallelCleaning code unloading should take lock to protect shared code roots array
Reviewed-by: shade
author | zgu |
---|---|
date | Wed, 29 May 2019 10:57:19 -0400 |
parents | 69a35cd74f7d |
children | c1ad2862d0dd |
files | src/hotspot/share/gc/shenandoah/shenandoahCodeRoots.cpp src/hotspot/share/gc/shenandoah/shenandoahCodeRoots.hpp |
diffstat | 2 files changed, 10 insertions(+), 2 deletions(-) [+] |
line wrap: on
line diff
--- a/src/hotspot/share/gc/shenandoah/shenandoahCodeRoots.cpp Wed May 29 23:36:36 2019 +0800 +++ b/src/hotspot/share/gc/shenandoah/shenandoahCodeRoots.cpp Wed May 29 10:57:19 2019 -0400 @@ -26,6 +26,7 @@ #include "code/nmethod.hpp" #include "gc/shenandoah/shenandoahHeap.inline.hpp" #include "gc/shenandoah/shenandoahCodeRoots.hpp" +#include "gc/shenandoah/shenandoahUtils.hpp" #include "memory/resourceArea.hpp" #include "memory/universe.hpp" @@ -121,18 +122,21 @@ }; GrowableArray<ShenandoahNMethod*>* ShenandoahCodeRoots::_recorded_nms; +ShenandoahLock ShenandoahCodeRoots::_recorded_nms_lock; void ShenandoahCodeRoots::initialize() { _recorded_nms = new (ResourceObj::C_HEAP, mtGC) GrowableArray<ShenandoahNMethod*>(100, true, mtGC); } void ShenandoahCodeRoots::add_nmethod(nmethod* nm) { - assert(CodeCache_lock->owned_by_self(), "Must own CodeCache_lock"); switch (ShenandoahCodeRootsStyle) { case 0: case 1: break; case 2: { + assert_locked_or_safepoint(CodeCache_lock); + ShenandoahLocker locker(CodeCache_lock->owned_by_self() ? NULL : &_recorded_nms_lock); + ShenandoahNMethodOopDetector detector; nm->oops_do(&detector); @@ -156,13 +160,15 @@ }; void ShenandoahCodeRoots::remove_nmethod(nmethod* nm) { - assert(CodeCache_lock->owned_by_self(), "Must own CodeCache_lock"); switch (ShenandoahCodeRootsStyle) { case 0: case 1: { break; } case 2: { + assert_locked_or_safepoint(CodeCache_lock); + ShenandoahLocker locker(CodeCache_lock->owned_by_self() ? NULL : &_recorded_nms_lock); + ShenandoahNMethodOopDetector detector; nm->oops_do(&detector, /* allow_zombie = */ true);
--- a/src/hotspot/share/gc/shenandoah/shenandoahCodeRoots.hpp Wed May 29 23:36:36 2019 +0800 +++ b/src/hotspot/share/gc/shenandoah/shenandoahCodeRoots.hpp Wed May 29 10:57:19 2019 -0400 @@ -26,6 +26,7 @@ #include "code/codeCache.hpp" #include "gc/shenandoah/shenandoahSharedVariables.hpp" +#include "gc/shenandoah/shenandoahLock.hpp" #include "memory/allocation.hpp" #include "memory/iterator.hpp" @@ -132,6 +133,7 @@ private: static GrowableArray<ShenandoahNMethod*>* _recorded_nms; + static ShenandoahLock _recorded_nms_lock; }; #endif // SHARE_GC_SHENANDOAH_SHENANDOAHCODEROOTS_HPP