File tree 2 files changed +11
-4
lines changed
src/hotspot/share/gc/shenandoah
2 files changed +11
-4
lines changed Original file line number Diff line number Diff line change 46
46
47
47
ShenandoahGCStateResetter::ShenandoahGCStateResetter () :
48
48
_heap(ShenandoahHeap::heap()),
49
- _gc_state(_heap->gc_state ()) {
49
+ _saved_gc_state(_heap->gc_state ()),
50
+ _saved_gc_state_changed(_heap->_gc_state_changed) {
51
+ // Clear state to deactivate barriers. Indicate that state has changed
52
+ // so that verifier threads will use this value, rather than thread local
53
+ // values (which we are _not_ changing here).
50
54
_heap->_gc_state .clear ();
55
+ _heap->_gc_state_changed = true ;
51
56
}
52
57
53
58
ShenandoahGCStateResetter::~ShenandoahGCStateResetter () {
54
- _heap->_gc_state .set (_gc_state);
55
- assert (_heap->gc_state () == _gc_state, " Should be restored" );
59
+ _heap->_gc_state .set (_saved_gc_state);
60
+ _heap->_gc_state_changed = _saved_gc_state_changed;
61
+ assert (_heap->gc_state () == _saved_gc_state, " Should be restored" );
56
62
}
57
63
58
64
void ShenandoahRootVerifier::roots_do (OopIterateClosure* oops) {
Original file line number Diff line number Diff line change 32
32
class ShenandoahGCStateResetter : public StackObj {
33
33
private:
34
34
ShenandoahHeap* const _heap;
35
- const char _gc_state;
35
+ const char _saved_gc_state;
36
+ const bool _saved_gc_state_changed;
36
37
37
38
public:
38
39
ShenandoahGCStateResetter ();
You can’t perform that action at this time.
0 commit comments