40
40
#include " runtime/thread.hpp"
41
41
#include " utilities/debug.hpp"
42
42
43
+ ShenandoahGCStateResetter::ShenandoahGCStateResetter () :
44
+ _gc_state(ShenandoahHeap::heap()->gc_state()),
45
+ _concurrent_weak_root_in_progress(ShenandoahHeap::heap()->is_concurrent_weak_root_in_progress()) {
46
+ }
47
+
48
+ ShenandoahGCStateResetter::~ShenandoahGCStateResetter () {
49
+ ShenandoahHeap* const heap = ShenandoahHeap::heap ();
50
+ heap->_gc_state .set (_gc_state);
51
+ assert (heap->gc_state () == _gc_state, " Should be restored" );
52
+ heap->set_concurrent_weak_root_in_progress (_concurrent_weak_root_in_progress);
53
+ }
54
+
43
55
// Check for overflow of number of root types.
44
56
STATIC_ASSERT ((static_cast <uint>(ShenandoahRootVerifier::AllRoots) + 1) > static_cast<uint>(ShenandoahRootVerifier::AllRoots));
45
57
@@ -60,6 +72,8 @@ ShenandoahRootVerifier::RootTypes ShenandoahRootVerifier::combine(RootTypes t1,
60
72
}
61
73
62
74
void ShenandoahRootVerifier::oops_do (OopClosure* oops) {
75
+ ShenandoahGCStateResetter resetter;
76
+
63
77
CodeBlobToOopClosure blobs (oops, !CodeBlobToOopClosure::FixRelocations);
64
78
if (verify (CodeRoots)) {
65
79
shenandoah_assert_locked_or_safepoint (CodeCache_lock);
@@ -108,6 +122,7 @@ void ShenandoahRootVerifier::oops_do(OopClosure* oops) {
108
122
}
109
123
110
124
void ShenandoahRootVerifier::roots_do (OopClosure* oops) {
125
+ ShenandoahGCStateResetter resetter;
111
126
shenandoah_assert_safepoint ();
112
127
113
128
CodeBlobToOopClosure blobs (oops, !CodeBlobToOopClosure::FixRelocations);
@@ -133,6 +148,7 @@ void ShenandoahRootVerifier::roots_do(OopClosure* oops) {
133
148
}
134
149
135
150
void ShenandoahRootVerifier::strong_roots_do (OopClosure* oops) {
151
+ ShenandoahGCStateResetter resetter;
136
152
shenandoah_assert_safepoint ();
137
153
138
154
CodeBlobToOopClosure blobs (oops, !CodeBlobToOopClosure::FixRelocations);
0 commit comments