private IRubyObject trap(final Ruby runtime, final String signalName, final SignalHandler handler) { boolean handled; SignalHandler oldHandler; Signal signal; try { signal = new Signal(signalName); oldHandler = Signal.handle(signal, handler); synchronized (original) { if (!original.containsKey(signal)) original.put(signal, oldHandler); } handled = true; } catch (IllegalArgumentException e) { signal = null; oldHandler = fakeOriginal.get(signalName); synchronized (fakeOriginal) { fakeOriginal.put(signalName, handler); } // EXIT is a special pseudo-signal. We want to mark this signal as handled if so. handled = signalName.equals("EXIT"); } return getSignalResult(runtime, oldHandler, handled); }
private IRubyObject trap(final Ruby runtime, final String signalName, final SignalHandler handler) { boolean handled; SignalHandler oldHandler; Signal signal; try { signal = new Signal(signalName); oldHandler = Signal.handle(signal, handler); synchronized (original) { if (!original.containsKey(signal)) original.put(signal, oldHandler); } handled = true; } catch (IllegalArgumentException e) { signal = null; oldHandler = fakeOriginal.get(signalName); synchronized (fakeOriginal) { fakeOriginal.put(signalName, handler); } // EXIT is a special pseudo-signal. We want to mark this signal as handled if so. handled = signalName.equals("EXIT"); } return getSignalResult(runtime, oldHandler, handled); }
public IRubyObject restorePlatformDefault(IRubyObject recv, IRubyObject sig) { SignalHandler handler; Ruby runtime = recv.getRuntime(); try { synchronized (original) { handler = original.get(new Signal(sig.toString())); } } catch (IllegalArgumentException e) { handler = null; } if (handler != null) { return trap(runtime, sig.toString(), handler); } else { // JRuby hasn't touched this signal handler, so it should be the platform default already // We still need to return the handler if one exists, though. synchronized (fakeOriginal) { handler = fakeOriginal.remove(sig.toString()); } return getSignalResult(runtime, handler, true); } }
public IRubyObject restorePlatformDefault(IRubyObject recv, IRubyObject sig) { SignalHandler handler; Ruby runtime = recv.getRuntime(); try { synchronized (original) { handler = original.get(new Signal(sig.toString())); } } catch (IllegalArgumentException e) { handler = null; } if (handler != null) { return trap(runtime, sig.toString(), handler); } else { // JRuby hasn't touched this signal handler, so it should be the platform default already // We still need to return the handler if one exists, though. synchronized (fakeOriginal) { handler = fakeOriginal.remove(sig.toString()); } return getSignalResult(runtime, handler, true); } }