Refactor Signal for graalvm

The graalvm issues warnings about the objects defined in
Signal.register, so I made them top level private classes instead.
This commit is contained in:
Ethan Atkins 2020-06-21 16:58:23 -07:00
parent 7b05ef5918
commit 52d19d8f0c
1 changed files with 14 additions and 11 deletions

View File

@ -7,6 +7,8 @@
package sbt.internal.util
import sun.misc.{ Signal, SignalHandler }
object Signals {
val CONT = "CONT"
val INT = "INT"
@ -36,24 +38,14 @@ object Signals {
def register(handler: () => Unit, signal: String = INT): Registration =
// TODO - Maybe we can just ignore things if not is-supported.
if (supported(signal)) {
import sun.misc.{ Signal, SignalHandler }
val intSignal = new Signal(signal)
val newHandler = new SignalHandler {
def handle(sig: Signal): Unit = { handler() }
}
val oldHandler = Signal.handle(intSignal, newHandler)
object unregisterNewHandler extends Registration {
override def remove(): Unit = {
Signal.handle(intSignal, oldHandler)
()
}
}
unregisterNewHandler
new UnregisterNewHandler(intSignal, oldHandler)
} else {
// TODO - Maybe we should just throw an exception if we don't support signals...
object NullUnregisterNewHandler extends Registration {
override def remove(): Unit = ()
}
NullUnregisterNewHandler
}
@ -64,6 +56,17 @@ object Signals {
} catch { case _: LinkageError => false }
}
private class UnregisterNewHandler(intSignal: Signal, oldHandler: SignalHandler)
extends Signals.Registration {
override def remove(): Unit = {
Signal.handle(intSignal, oldHandler)
()
}
}
private object NullUnregisterNewHandler extends Signals.Registration {
override def remove(): Unit = ()
}
// Must only be referenced using a
// try { } catch { case _: LinkageError => ... }
// block to