Skip to content

Commit 0b60f70

Browse files
committed
Moving marking thread local data to RubyFiber.
1 parent e66e124 commit 0b60f70

File tree

6 files changed

+28
-15
lines changed

6 files changed

+28
-15
lines changed

src/main/java/org/truffleruby/RubyContext.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -189,8 +189,8 @@ public RubyContext(RubyLanguage language, TruffleLanguage.Env env) {
189189
codeLoader = new CodeLoader(language, this);
190190
featureLoader = new FeatureLoader(this, language);
191191
referenceProcessor = new ReferenceProcessor(this);
192-
finalizationService = new FinalizationService(referenceProcessor);
193-
markingService = new MarkingService(referenceProcessor);
192+
finalizationService = new FinalizationService(getLanguageSlow(), referenceProcessor);
193+
markingService = new MarkingService(getLanguageSlow(), referenceProcessor);
194194

195195
// We need to construct this at runtime
196196
random = createRandomInstance();

src/main/java/org/truffleruby/RubyLanguage.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -208,7 +208,7 @@ private static final class ThreadLocalState {
208208
public final FrozenStringLiterals frozenStringLiterals;
209209

210210
public final ReferenceQueue<Object> sharedReferenceQueue = new ReferenceQueue<>();
211-
public final FinalizationService sharedFinzationService = new FinalizationService(sharedReferenceQueue);
211+
public final FinalizationService sharedFinzationService = new FinalizationService(this, sharedReferenceQueue);
212212
public volatile ValueWrapperManager.HandleBlockWeakReference[] handleBlockSharedMap = new ValueWrapperManager.HandleBlockWeakReference[0];
213213
public final ValueWrapperManager.HandleBlockAllocator handleBlockAllocator = new ValueWrapperManager.HandleBlockAllocator();
214214

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

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
import java.util.Objects;
1515

1616
import org.truffleruby.RubyContext;
17+
import org.truffleruby.RubyLanguage;
1718
import org.truffleruby.core.MarkingService.ExtensionCallStack;
1819
import org.truffleruby.language.RubyDynamicObject;
1920

@@ -47,12 +48,12 @@ public RubyDynamicObject getRoot() {
4748
}
4849
}
4950

50-
public FinalizationService(ReferenceQueue<Object> processingQueue) {
51-
super(processingQueue);
51+
public FinalizationService(RubyLanguage language, ReferenceQueue<Object> processingQueue) {
52+
super(language, processingQueue);
5253
}
5354

54-
public FinalizationService(ReferenceProcessor referenceProcessor) {
55-
this(referenceProcessor.processingQueue);
55+
public FinalizationService(RubyLanguage language, ReferenceProcessor referenceProcessor) {
56+
this(language, referenceProcessor.processingQueue);
5657
}
5758

5859
@TruffleBoundary

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

Lines changed: 14 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,10 @@
1313
import java.util.ArrayList;
1414

1515
import org.truffleruby.RubyContext;
16+
import org.truffleruby.RubyLanguage;
1617
import org.truffleruby.cext.ValueWrapperManager;
1718
import org.truffleruby.core.array.ArrayUtils;
19+
import org.truffleruby.core.fiber.RubyFiber;
1820
import org.truffleruby.core.queue.UnsizedQueue;
1921

2022
import com.oracle.truffle.api.CompilerDirectives.TruffleBoundary;
@@ -57,9 +59,10 @@ public static class MarkRunnerService extends ReferenceProcessingService<Marking
5759
private final MarkingService markingService;
5860

5961
public MarkRunnerService(
62+
RubyLanguage lanugage,
6063
ReferenceQueue<Object> processingQueue,
6164
MarkingService markingService) {
62-
super(processingQueue);
65+
super(lanugage, processingQueue);
6366
this.markingService = markingService;
6467
}
6568

@@ -172,22 +175,26 @@ public Object getBlock() {
172175

173176
@TruffleBoundary
174177
public MarkerThreadLocalData getThreadLocalData() {
175-
return threadLocalData.get();
178+
RubyFiber fiber = language.getCurrentThread().getCurrentFiber();
179+
if (fiber.markingData == null) {
180+
fiber.markingData = makeThreadLocalData();
181+
}
182+
return fiber.markingData;
176183
}
177184

178185
@TruffleBoundary
179186
public void cleanupThreadLocalData() {
180187
threadLocalData.remove();
181188
}
182189

183-
public MarkingService(ReferenceProcessor referenceprocessor) {
184-
this(referenceprocessor.processingQueue);
190+
public MarkingService(RubyLanguage language, ReferenceProcessor referenceprocessor) {
191+
this(language, referenceprocessor.processingQueue);
185192
}
186193

187-
public MarkingService(ReferenceQueue<Object> processingQueue) {
188-
super(processingQueue);
194+
public MarkingService(RubyLanguage language, ReferenceQueue<Object> processingQueue) {
195+
super(language, processingQueue);
189196
threadLocalData = ThreadLocal.withInitial(this::makeThreadLocalData);
190-
runnerService = new MarkRunnerService(processingQueue, this);
197+
runnerService = new MarkRunnerService(language, processingQueue, this);
191198
}
192199

193200
@TruffleBoundary

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

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616

1717
import com.oracle.truffle.api.CompilerDirectives;
1818
import org.truffleruby.RubyContext;
19+
import org.truffleruby.RubyLanguage;
1920
import org.truffleruby.SuppressFBWarnings;
2021
import org.truffleruby.core.thread.RubyThread;
2122
import org.truffleruby.core.thread.ThreadManager;
@@ -250,8 +251,10 @@ protected final void drainReferenceQueues() {
250251
private R first = null;
251252

252253
protected final ReferenceQueue<Object> processingQueue;
254+
protected final RubyLanguage language;
253255

254-
public ReferenceProcessingService(ReferenceQueue<Object> processingQueue) {
256+
public ReferenceProcessingService(RubyLanguage language, ReferenceQueue<Object> processingQueue) {
257+
this.language = language;
255258
this.processingQueue = processingQueue;
256259
}
257260

src/main/java/org/truffleruby/core/fiber/RubyFiber.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
import com.oracle.truffle.api.CompilerAsserts;
1818
import org.truffleruby.RubyContext;
1919
import org.truffleruby.RubyLanguage;
20+
import org.truffleruby.core.MarkingService;
2021
import org.truffleruby.core.array.ArrayHelpers;
2122
import org.truffleruby.core.array.RubyArray;
2223
import org.truffleruby.core.basicobject.RubyBasicObject;
@@ -43,6 +44,7 @@ public final class RubyFiber extends RubyDynamicObject implements ObjectGraphNod
4344
volatile boolean transferred = false;
4445
public volatile Throwable uncaughtException = null;
4546
String sourceLocation;
47+
public MarkingService.MarkerThreadLocalData markingData = null;
4648

4749
public RubyFiber(
4850
RubyClass rubyClass,

0 commit comments

Comments
 (0)