Skip to content

Commit a33c60b

Browse files
committed
Guard against pathological marking/GC interaction.
1 parent 8891032 commit a33c60b

File tree

1 file changed

+3
-3
lines changed

1 file changed

+3
-3
lines changed

src/main/java/org/truffleruby/core/MarkingService.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,7 @@ public ReferenceProcessingService<MarkerReference> service() {
8585

8686
private Object[] keptObjects;
8787
@SuppressWarnings("unused")
88-
private Object[] oldKeptObjects = null;
88+
private final ArrayDeque<Object[]> oldKeptObjects = new ArrayDeque<Object[]>();
8989

9090
private int counter = 0;
9191

@@ -118,7 +118,7 @@ public void popStackPreservationFrame() {
118118

119119
public synchronized void runAllMarkers() {
120120
counter = 0;
121-
oldKeptObjects = keptObjects;
121+
oldKeptObjects.push(keptObjects);
122122
keptObjects = new Object[cacheSize];
123123
MarkerReference currentMarker = getFirst();
124124
MarkerReference nextMarker;
@@ -130,7 +130,7 @@ public synchronized void runAllMarkers() {
130130
}
131131
currentMarker = nextMarker;
132132
}
133-
oldKeptObjects = null;
133+
oldKeptObjects.pop();
134134
}
135135

136136
public void addMarker(DynamicObject object, MarkerAction action) {

0 commit comments

Comments
 (0)