< prev index next >
src/jdk.unsupported/share/classes/sun/misc/Signal.java
Print this page
*** 23,33 ****
* questions.
*/
package sun.misc;
! import java.util.Objects;
/**
* This class provides ANSI/ISO C signal support. A Java program can register
* signal handlers for the current process. There are two restrictions:
* <ul>
--- 23,33 ----
* questions.
*/
package sun.misc;
! import jdk.internal.unsupported.SignalDelegate;
/**
* This class provides ANSI/ISO C signal support. A Java program can register
* signal handlers for the current process. There are two restrictions:
* <ul>
*** 72,83 ****
* @see sun.misc.SignalHandler
* @since 1.2
*/
public final class Signal {
! // Delegate to jdk.internal.misc.Signal.
! private final jdk.internal.misc.Signal iSignal;
/* Returns the signal number */
public int getNumber() {
return iSignal.getNumber();
}
--- 72,82 ----
* @see sun.misc.SignalHandler
* @since 1.2
*/
public final class Signal {
! private final SignalDelegate iSignal;
/* Returns the signal number */
public int getNumber() {
return iSignal.getNumber();
}
*** 134,144 ****
* @param name the name of the signal.
* @exception IllegalArgumentException unknown signal
* @see sun.misc.Signal#getName()
*/
public Signal(String name) {
! iSignal = new jdk.internal.misc.Signal(name);
}
/**
* Registers a signal handler.
*
--- 133,143 ----
* @param name the name of the signal.
* @exception IllegalArgumentException unknown signal
* @see sun.misc.Signal#getName()
*/
public Signal(String name) {
! iSignal = new SignalDelegate(name);
}
/**
* Registers a signal handler.
*
*** 152,226 ****
* @see sun.misc.SignalHandler#SIG_IGN
*/
public static synchronized SignalHandler handle(Signal sig,
SignalHandler handler)
throws IllegalArgumentException {
! jdk.internal.misc.Signal.Handler oldHandler = jdk.internal.misc.Signal.handle(sig.iSignal,
! InternalMiscHandler.of(sig, handler));
return SunMiscHandler.of(sig.iSignal, oldHandler);
}
/**
* Raises a signal in the current process.
*
* @param sig a signal
* @see sun.misc.Signal#handle(Signal sig, SignalHandler handler)
*/
public static void raise(Signal sig) throws IllegalArgumentException {
! jdk.internal.misc.Signal.raise(sig.iSignal);
}
/*
! * Wrapper class to proxy a SignalHandler to a jdk.internal.misc.Signal.Handler.
*/
! static final class InternalMiscHandler implements jdk.internal.misc.Signal.Handler {
private final SignalHandler handler;
private final Signal signal;
! static jdk.internal.misc.Signal.Handler of(Signal signal, SignalHandler handler) {
if (handler == SignalHandler.SIG_DFL) {
! return jdk.internal.misc.Signal.Handler.SIG_DFL;
} else if (handler == SignalHandler.SIG_IGN) {
! return jdk.internal.misc.Signal.Handler.SIG_IGN;
} else if (handler instanceof SunMiscHandler) {
return ((SunMiscHandler)handler).iHandler;
} else {
! return new InternalMiscHandler(signal, handler);
}
}
! private InternalMiscHandler(Signal signal, SignalHandler handler) {
this.handler = handler;
this.signal = signal;
}
@Override
! public void handle(jdk.internal.misc.Signal ignore) {
handler.handle(signal);
}
}
/*
! * Wrapper class to proxy a jdk.internal.misc.Signal.Handler to a SignalHandler.
*/
static final class SunMiscHandler implements SignalHandler {
! private final jdk.internal.misc.Signal iSignal;
! private final jdk.internal.misc.Signal.Handler iHandler;
! static SignalHandler of(jdk.internal.misc.Signal signal, jdk.internal.misc.Signal.Handler handler) {
! if (handler == jdk.internal.misc.Signal.Handler.SIG_DFL) {
return SignalHandler.SIG_DFL;
! } else if (handler == jdk.internal.misc.Signal.Handler.SIG_IGN) {
return SignalHandler.SIG_IGN;
! } else if (handler instanceof InternalMiscHandler) {
! return ((InternalMiscHandler) handler).handler;
} else {
return new SunMiscHandler(signal, handler);
}
}
! SunMiscHandler(jdk.internal.misc.Signal iSignal, jdk.internal.misc.Signal.Handler iHandler) {
this.iSignal = iSignal;
this.iHandler = iHandler;
}
@Override
--- 151,225 ----
* @see sun.misc.SignalHandler#SIG_IGN
*/
public static synchronized SignalHandler handle(Signal sig,
SignalHandler handler)
throws IllegalArgumentException {
! SignalDelegate.Handler oldHandler = SignalDelegate.handle(sig.iSignal,
! SignalDelegateHandler.of(sig, handler));
return SunMiscHandler.of(sig.iSignal, oldHandler);
}
/**
* Raises a signal in the current process.
*
* @param sig a signal
* @see sun.misc.Signal#handle(Signal sig, SignalHandler handler)
*/
public static void raise(Signal sig) throws IllegalArgumentException {
! SignalDelegate.raise(sig.iSignal);
}
/*
! * Wrapper class to proxy a SignalHandler to a jdk.internal.unsupported.SunMiscSignal.Handler.
*/
! static final class SignalDelegateHandler implements SignalDelegate.Handler {
private final SignalHandler handler;
private final Signal signal;
! static SignalDelegate.Handler of(Signal signal, SignalHandler handler) {
if (handler == SignalHandler.SIG_DFL) {
! return SignalDelegate.Handler.SIG_DFL;
} else if (handler == SignalHandler.SIG_IGN) {
! return SignalDelegate.Handler.SIG_IGN;
} else if (handler instanceof SunMiscHandler) {
return ((SunMiscHandler)handler).iHandler;
} else {
! return new SignalDelegateHandler(signal, handler);
}
}
! private SignalDelegateHandler(Signal signal, SignalHandler handler) {
this.handler = handler;
this.signal = signal;
}
@Override
! public void handle(SignalDelegate ignore) {
handler.handle(signal);
}
}
/*
! * Wrapper class to proxy a jdk.internal.unsupported.SunMiscSignal.Handler to a SignalHandler.
*/
static final class SunMiscHandler implements SignalHandler {
! private final SignalDelegate iSignal;
! private final SignalDelegate.Handler iHandler;
! static SignalHandler of(SignalDelegate signal, SignalDelegate.Handler handler) {
! if (handler == SignalDelegate.Handler.SIG_DFL) {
return SignalHandler.SIG_DFL;
! } else if (handler == SignalDelegate.Handler.SIG_IGN) {
return SignalHandler.SIG_IGN;
! } else if (handler instanceof SignalDelegateHandler) {
! return ((SignalDelegateHandler) handler).handler;
} else {
return new SunMiscHandler(signal, handler);
}
}
! SunMiscHandler(SignalDelegate iSignal, SignalDelegate.Handler iHandler) {
this.iSignal = iSignal;
this.iHandler = iHandler;
}
@Override
< prev index next >