@@ -84,6 +84,7 @@ public ReferenceProcessingService<MarkerReference> service() {
84
84
private final ThreadLocal <Deque <ArrayList <Object >>> stackPreservation = ThreadLocal .withInitial (() -> new ArrayDeque <>());
85
85
86
86
private Object [] keptObjects ;
87
+ private Object [] oldKeptObjects = null ;
87
88
88
89
private int counter = 0 ;
89
90
@@ -94,25 +95,24 @@ public MarkingService(RubyContext context, ReferenceProcessor referenceProcessor
94
95
}
95
96
96
97
public void keepObject (Object object ) {
97
- Object [] oldKeptObjects = addToKeptObjects (object );
98
- if (oldKeptObjects != null ) {
98
+ if (addToKeptObjects (object )) {
99
99
runAllMarkers ();
100
100
}
101
101
}
102
102
103
- private synchronized Object [] addToKeptObjects (Object object ) {
103
+ private synchronized boolean addToKeptObjects (Object object ) {
104
104
final ArrayList <Object > keepList = stackPreservation .get ().peekFirst ();
105
105
if (keepList != null ) {
106
106
keepList .add (object );
107
107
}
108
108
keptObjects [counter ++] = object ;
109
109
if (counter == cacheSize ) {
110
110
counter = 0 ;
111
- Object [] tmp = keptObjects ;
111
+ oldKeptObjects = keptObjects ;
112
112
keptObjects = new Object [cacheSize ];
113
- return tmp ;
113
+ return true ;
114
114
}
115
- return null ;
115
+ return false ;
116
116
}
117
117
118
118
@ TruffleBoundary
@@ -126,8 +126,7 @@ public void popStackPreservationFrame() {
126
126
}
127
127
128
128
public synchronized void runMarkersAndDropKeptList () {
129
- @ SuppressWarnings ("unused" )
130
- Object [] tmp = keptObjects ;
129
+ oldKeptObjects = keptObjects ;
131
130
keptObjects = new Object [cacheSize ];
132
131
runAllMarkers ();
133
132
}
@@ -143,6 +142,7 @@ private synchronized void runAllMarkers() {
143
142
}
144
143
currentMarker = nextMarker ;
145
144
}
145
+ oldKeptObjects = null ;
146
146
}
147
147
148
148
public void addMarker (DynamicObject object , MarkerAction action ) {
0 commit comments