Listen for SIGTERM as well and gracefully shutdown in that case.

git-svn-id: svn+ssh://src.earth.threerings.net/narya/trunk@4959 542714f4-19e9-0310-aa3c-eee0fc999fb1
This commit is contained in:
Michael Bayne
2008-03-05 23:28:28 +00:00
parent e8b5d41fb8
commit 8a745b30e0
4 changed files with 19 additions and 1 deletions
@@ -42,6 +42,15 @@ public abstract class AbstractSignalHandler
*/
protected abstract boolean registerHandlers ();
/**
* Implementations should call this method when a SIGTERM is received.
*/
protected void termReceived ()
{
log.info("Shutdown initiated by TERM signal.");
_server.queueShutdown();
}
/**
* Implementations should call this method when a SIGINT is received.
*/
@@ -35,6 +35,9 @@ public class NativeSignalHandler extends AbstractSignalHandler
public boolean signalReceived (int signo)
{
switch (signo) {
case SignalManager.SIGTERM:
termReceived();
break;
case SignalManager.SIGINT:
intReceived();
break;
@@ -53,6 +56,7 @@ public class NativeSignalHandler extends AbstractSignalHandler
if (!SignalManager.servicesAvailable()) {
return false;
}
SignalManager.registerSignalHandler(SignalManager.SIGTERM, this);
SignalManager.registerSignalHandler(SignalManager.SIGINT, this);
SignalManager.registerSignalHandler(SignalManager.SIGHUP, this);
return true;
@@ -148,7 +148,7 @@ public class PresentsServer
log.info("Starting up server [os=" + si.osToString() + ", jvm=" + si.jvmToString() +
", mem=" + si.memoryToString() + "].");
// register SIGINT (ctrl-c) and a SIGHUP handlers
// register SIGTERM, SIGINT (ctrl-c) and a SIGHUP handlers
boolean registered = false;
try {
registered = new SunSignalHandler().init(this);
@@ -33,6 +33,11 @@ public class SunSignalHandler extends AbstractSignalHandler
{
protected boolean registerHandlers ()
{
SignalUtil.register(SignalUtil.Number.TERM, new SignalUtil.Handler() {
public void signalReceived (SignalUtil.Number sig) {
termReceived();
}
});
SignalUtil.register(SignalUtil.Number.INT, new SignalUtil.Handler() {
public void signalReceived (SignalUtil.Number sig) {
intReceived();