Skip to content

Commit 349f760

Browse files
committed
dry-out interrupt mask check - raise on non Symbol (like MRI)
1 parent f1c36bc commit 349f760

File tree

1 file changed

+15
-19
lines changed

1 file changed

+15
-19
lines changed

core/src/main/java/org/jruby/RubyThread.java

Lines changed: 15 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -348,14 +348,7 @@ private int pendingInterruptCheckMask(ThreadContext context, IRubyObject err) {
348348
IRubyObject sym;
349349

350350
if (!(sym = mask.op_aref(context, klass)).isNil()) {
351-
String symStr = sym.toString();
352-
switch (symStr) {
353-
case "immediate": return INTERRUPT_IMMEDIATE;
354-
case "on_blocking": return INTERRUPT_ON_BLOCKING;
355-
case "never": return INTERRUPT_NEVER;
356-
default:
357-
throw context.runtime.newThreadError("unknown mask signature");
358-
}
351+
return checkInterruptMask(context, sym);
359352
}
360353
}
361354
}
@@ -772,21 +765,24 @@ public static IRubyObject handle_interrupt(ThreadContext context, IRubyObject se
772765
}
773766
}
774767

775-
private static final RubyHash.VisitorWithState HandleInterruptVisitor = new RubyHash.VisitorWithState() {
768+
private static final RubyHash.VisitorWithState HandleInterruptVisitor = new RubyHash.VisitorWithState<Void>() {
776769
@Override
777-
public void visit(ThreadContext context, RubyHash self, IRubyObject key, IRubyObject value, int index, Object state) {
778-
if (value instanceof RubySymbol) {
779-
RubySymbol sym = (RubySymbol) value;
780-
switch (sym.idString()) {
781-
case "immediate" : return;
782-
case "on_blocking" : return;
783-
case "never" : return;
784-
default : throw key.getRuntime().newArgumentError("unknown mask signature");
785-
}
786-
}
770+
public void visit(ThreadContext context, RubyHash self, IRubyObject key, IRubyObject value, int index, Void state) {
771+
checkInterruptMask(context, value);
787772
}
788773
};
789774

775+
private static int checkInterruptMask(final ThreadContext context, final IRubyObject sym) {
776+
if (sym instanceof RubySymbol) {
777+
switch (((RubySymbol) sym).idString()) {
778+
case "immediate": return INTERRUPT_IMMEDIATE;
779+
case "on_blocking": return INTERRUPT_ON_BLOCKING;
780+
case "never": return INTERRUPT_NEVER;
781+
}
782+
}
783+
throw context.runtime.newArgumentError("unknown mask signature");
784+
}
785+
790786
@JRubyMethod(name = "pending_interrupt?", meta = true, optional = 1)
791787
public static IRubyObject pending_interrupt_p(ThreadContext context, IRubyObject self, IRubyObject[] args) {
792788
return context.getThread().pending_interrupt_p(context, args);

0 commit comments

Comments
 (0)