Skip to content

Commit 4e214cf

Browse files
committed
[GR-31421] Move RUBY_DEFAULT_HANDLERS to RubyContext
PullRequest: truffleruby/2658
2 parents 78be262 + 7af0764 commit 4e214cf

File tree

3 files changed

+12
-8
lines changed

3 files changed

+12
-8
lines changed

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

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
import java.util.Map;
2222
import java.util.WeakHashMap;
2323
import java.util.concurrent.ConcurrentHashMap;
24+
import java.util.concurrent.ConcurrentMap;
2425
import java.util.concurrent.locks.ReentrantLock;
2526
import java.util.logging.Level;
2627

@@ -94,6 +95,7 @@
9495
import com.oracle.truffle.api.instrumentation.Instrumenter;
9596
import com.oracle.truffle.api.nodes.IndirectCallNode;
9697
import com.oracle.truffle.api.source.Source;
98+
import sun.misc.SignalHandler;
9799

98100
public class RubyContext {
99101

@@ -132,6 +134,8 @@ public class RubyContext {
132134
/** (Symbol, refinements) -> Proc for Symbol#to_proc */
133135
public final Map<Pair<RubySymbol, Map<RubyModule, RubyModule[]>>, RootCallTarget> cachedSymbolToProcTargetsWithRefinements = new ConcurrentHashMap<>();
134136
private final Map<ImmutableRubyString, NativeRope> immutableNativeRopes = new ConcurrentHashMap<>();
137+
/** Default signal handlers for Ruby, only SIGINT and SIGALRM, see {@code core/main.rb} */
138+
public final ConcurrentMap<String, SignalHandler> defaultRubySignalHandlers = new ConcurrentHashMap<>();
135139

136140
@CompilationFinal private SecureRandom random;
137141
private final Hashing hashing;

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -294,7 +294,7 @@ private boolean restoreDefaultHandler(String signalName) {
294294
}
295295

296296
try {
297-
return Signals.restoreRubyDefaultHandler(signalName);
297+
return Signals.restoreRubyDefaultHandler(getContext(), signalName);
298298
} catch (IllegalArgumentException e) {
299299
throw new RaiseException(getContext(), coreExceptions().argumentError(e.getMessage(), this));
300300
}
@@ -341,7 +341,7 @@ private boolean registerHandler(String signalName, SignalHandler newHandler, boo
341341
}
342342

343343
try {
344-
Signals.registerHandler(newHandler, signalName, isRubyDefaultHandler);
344+
Signals.registerHandler(getContext(), newHandler, signalName, isRubyDefaultHandler);
345345
} catch (IllegalArgumentException e) {
346346
throw new RaiseException(getContext(), coreExceptions().argumentError(e.getMessage(), this));
347347
}

src/main/java/org/truffleruby/platform/Signals.java

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
import java.util.concurrent.ConcurrentHashMap;
1414
import java.util.concurrent.ConcurrentMap;
1515

16+
import org.truffleruby.RubyContext;
1617
import sun.misc.Signal;
1718
import sun.misc.SignalHandler;
1819

@@ -26,15 +27,14 @@ public class Signals {
2627
// Use String and not Signal as key to work around SVM not allowing new Signal("PROF")
2728
/** Default SignalHandlers for the JVM */
2829
private static final ConcurrentMap<String, SignalHandler> DEFAULT_HANDLERS = new ConcurrentHashMap<>();
29-
/** Default signal handlers for Ruby, only SIGINT and SIGALRM, see {@code core/main.rb} */
30-
private static final ConcurrentMap<String, SignalHandler> RUBY_DEFAULT_HANDLERS = new ConcurrentHashMap<>();
3130

32-
public static void registerHandler(SignalHandler newHandler, String signalName, boolean isRubyDefaultHandler) {
31+
public static void registerHandler(RubyContext context, SignalHandler newHandler, String signalName,
32+
boolean isRubyDefaultHandler) {
3333
final Signal signal = new Signal(signalName);
3434
final SignalHandler oldHandler = Signal.handle(signal, newHandler);
3535
DEFAULT_HANDLERS.putIfAbsent(signalName, oldHandler);
3636
if (isRubyDefaultHandler) {
37-
RUBY_DEFAULT_HANDLERS.putIfAbsent(signalName, newHandler);
37+
context.defaultRubySignalHandlers.putIfAbsent(signalName, newHandler);
3838
}
3939
}
4040

@@ -56,8 +56,8 @@ public static boolean restoreDefaultHandler(String signalName) {
5656
}
5757
}
5858

59-
public static boolean restoreRubyDefaultHandler(String signalName) {
60-
SignalHandler defaultHandler = RUBY_DEFAULT_HANDLERS.get(signalName);
59+
public static boolean restoreRubyDefaultHandler(RubyContext context, String signalName) {
60+
SignalHandler defaultHandler = context.defaultRubySignalHandlers.get(signalName);
6161
if (defaultHandler == null) {
6262
defaultHandler = DEFAULT_HANDLERS.get(signalName);
6363
}

0 commit comments

Comments
 (0)