Skip to content

Commit 7087fdf

Browse files
committed
Consider the root Ruby thread to not be isRubyManagedThread() (since it exists before)
* Necessary for MiscTest#timeoutExecution() where the thread running finalizeContext() must not wait for the main Java thread.
1 parent c211521 commit 7087fdf

File tree

2 files changed

+6
-8
lines changed

2 files changed

+6
-8
lines changed

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

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -316,9 +316,8 @@ public void start(RubyFiber fiber, Thread javaThread) {
316316

317317
if (Thread.currentThread() == javaThread) {
318318
context.getThreadManager().rubyFiber.set(fiber);
319-
}
320-
if (!threadManager.isRubyManagedThread(javaThread)) {
321-
context.getThreadManager().rubyFiberForeignMap.put(javaThread, fiber);
319+
} else {
320+
context.getThreadManager().javaThreadToRubyFiber.put(javaThread, fiber);
322321
}
323322

324323
fiber.thread = javaThread;
@@ -345,7 +344,7 @@ public void cleanup(RubyFiber fiber, Thread javaThread) {
345344
if (Thread.currentThread() == javaThread) {
346345
threadManager.rubyFiber.remove();
347346
}
348-
threadManager.rubyFiberForeignMap.remove(javaThread);
347+
threadManager.javaThreadToRubyFiber.remove(javaThread);
349348

350349
fiber.finishedLatch.countDown();
351350
}

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

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -77,11 +77,12 @@ public class ThreadManager {
7777

7878
private final Set<RubyThread> runningRubyThreads = Collections.newSetFromMap(new ConcurrentHashMap<>());
7979

80+
/** The set of Java threads TruffleRuby created, and is responsible to exit in {@link #killAndWaitOtherThreads()} */
8081
private final Set<Thread> rubyManagedThreads = Collections.newSetFromMap(new ConcurrentHashMap<>());
8182

82-
public final Map<Thread, RubyFiber> rubyFiberForeignMap = new ConcurrentHashMap<>();
83+
public final Map<Thread, RubyFiber> javaThreadToRubyFiber = new ConcurrentHashMap<>();
8384
public final ThreadLocal<RubyFiber> rubyFiber = ThreadLocal
84-
.withInitial(() -> rubyFiberForeignMap.get(Thread.currentThread()));
85+
.withInitial(() -> javaThreadToRubyFiber.get(Thread.currentThread()));
8586

8687
private boolean nativeInterrupt;
8788
private Timer nativeInterruptTimer;
@@ -116,13 +117,11 @@ public void dispose() {
116117

117118
public void initializeMainThread(Thread mainJavaThread) {
118119
rootJavaThread = mainJavaThread;
119-
rubyManagedThreads.add(rootJavaThread);
120120
start(rootThread, rootJavaThread);
121121
}
122122

123123
public void resetMainThread() {
124124
cleanup(rootThread, rootJavaThread);
125-
rubyManagedThreads.remove(rootJavaThread);
126125
rootJavaThread = null;
127126
}
128127

0 commit comments

Comments
 (0)