Skip to content

Commit af26f56

Browse files
committed
Move handle data to RubyFiber.
1 parent 0b60f70 commit af26f56

File tree

4 files changed

+11
-23
lines changed

4 files changed

+11
-23
lines changed

src/main/java/org/truffleruby/cext/ValueWrapperManager.java

Lines changed: 9 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
import org.truffleruby.SuppressFBWarnings;
2020
import org.truffleruby.cext.ValueWrapperManagerFactory.AllocateHandleNodeGen;
2121
import org.truffleruby.cext.ValueWrapperManagerFactory.GetHandleBlockHolderNodeGen;
22+
import org.truffleruby.core.fiber.RubyFiber;
2223
import org.truffleruby.extra.ffi.Pointer;
2324
import org.truffleruby.language.ImmutableRubyObject;
2425
import org.truffleruby.language.NotProvided;
@@ -60,13 +61,12 @@ public class ValueWrapperManager {
6061

6162
private volatile HandleBlockWeakReference[] blockMap = new HandleBlockWeakReference[0];
6263

63-
private final ThreadLocal<HandleThreadData> threadBlocks;
64-
6564
private final RubyContext context;
65+
private final RubyLanguage language;
6666

6767
public ValueWrapperManager(RubyContext context) {
6868
this.context = context;
69-
this.threadBlocks = ThreadLocal.withInitial(this::makeThreadData);
69+
this.language = context.getLanguageSlow();
7070
}
7171

7272
public HandleThreadData makeThreadData() {
@@ -81,14 +81,12 @@ public HandleThreadData makeThreadData() {
8181
return threadData;
8282
}
8383

84-
@TruffleBoundary
8584
public HandleThreadData getBlockHolder() {
86-
return threadBlocks.get();
87-
}
88-
89-
@TruffleBoundary
90-
public void cleanupBlockHolder() {
91-
threadBlocks.remove();
85+
RubyFiber fiber = language.getCurrentThread().getCurrentFiber();
86+
if (fiber.handleData == null) {
87+
fiber.handleData = makeThreadData();
88+
}
89+
return fiber.handleData;
9290
}
9391

9492
/* We keep a map of long wrappers that have been generated because various C extensions assume that any given fixnum
@@ -304,7 +302,7 @@ protected static class HandleBlockHolder {
304302
protected HandleBlock sharedHandleBlock = null;
305303
}
306304

307-
protected static class HandleThreadData {
305+
public static class HandleThreadData {
308306

309307
private final HandleBlockHolder holder = new HandleBlockHolder();
310308

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

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -110,8 +110,6 @@ public void runAllMarkers(RubyContext context) {
110110
}
111111
}
112112

113-
private final ThreadLocal<MarkerThreadLocalData> threadLocalData;
114-
115113
private final MarkRunnerService runnerService;
116114

117115
private final UnsizedQueue keptObjectQueue = new UnsizedQueue();
@@ -182,18 +180,12 @@ public MarkerThreadLocalData getThreadLocalData() {
182180
return fiber.markingData;
183181
}
184182

185-
@TruffleBoundary
186-
public void cleanupThreadLocalData() {
187-
threadLocalData.remove();
188-
}
189-
190183
public MarkingService(RubyLanguage language, ReferenceProcessor referenceprocessor) {
191184
this(language, referenceprocessor.processingQueue);
192185
}
193186

194187
public MarkingService(RubyLanguage language, ReferenceQueue<Object> processingQueue) {
195188
super(language, processingQueue);
196-
threadLocalData = ThreadLocal.withInitial(this::makeThreadLocalData);
197189
runnerService = new MarkRunnerService(language, processingQueue, this);
198190
}
199191

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.cext.ValueWrapperManager;
2021
import org.truffleruby.core.MarkingService;
2122
import org.truffleruby.core.array.ArrayHelpers;
2223
import org.truffleruby.core.array.RubyArray;
@@ -45,6 +46,7 @@ public final class RubyFiber extends RubyDynamicObject implements ObjectGraphNod
4546
public volatile Throwable uncaughtException = null;
4647
String sourceLocation;
4748
public MarkingService.MarkerThreadLocalData markingData = null;
49+
public ValueWrapperManager.HandleThreadData handleData = null;
4850

4951
public RubyFiber(
5052
RubyClass rubyClass,

src/main/java/org/truffleruby/core/thread/ThreadManager.java

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -617,10 +617,6 @@ public void initializeValuesForJavaThread(RubyThread rubyThread, Thread thread)
617617
}
618618

619619
public void cleanupValuesForJavaThread(Thread thread) {
620-
if (Thread.currentThread() == thread) {
621-
context.getMarkingService().cleanupThreadLocalData();
622-
context.getValueWrapperManager().cleanupBlockHolder();
623-
}
624620
javaThreadToRubyThread.remove(thread);
625621
}
626622

0 commit comments

Comments
 (0)