From 8a745b30e052e9471e02f7a309d8860fe572bbdc Mon Sep 17 00:00:00 2001 From: Michael Bayne Date: Wed, 5 Mar 2008 23:28:28 +0000 Subject: [PATCH] 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 --- .../presents/server/AbstractSignalHandler.java | 9 +++++++++ .../threerings/presents/server/NativeSignalHandler.java | 4 ++++ .../com/threerings/presents/server/PresentsServer.java | 2 +- .../com/threerings/presents/server/SunSignalHandler.java | 5 +++++ 4 files changed, 19 insertions(+), 1 deletion(-) diff --git a/src/java/com/threerings/presents/server/AbstractSignalHandler.java b/src/java/com/threerings/presents/server/AbstractSignalHandler.java index de0cdd72b..a8bb227fe 100644 --- a/src/java/com/threerings/presents/server/AbstractSignalHandler.java +++ b/src/java/com/threerings/presents/server/AbstractSignalHandler.java @@ -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. */ diff --git a/src/java/com/threerings/presents/server/NativeSignalHandler.java b/src/java/com/threerings/presents/server/NativeSignalHandler.java index 173d84181..780ad24c1 100644 --- a/src/java/com/threerings/presents/server/NativeSignalHandler.java +++ b/src/java/com/threerings/presents/server/NativeSignalHandler.java @@ -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; diff --git a/src/java/com/threerings/presents/server/PresentsServer.java b/src/java/com/threerings/presents/server/PresentsServer.java index 439cb6dbe..97773ac61 100644 --- a/src/java/com/threerings/presents/server/PresentsServer.java +++ b/src/java/com/threerings/presents/server/PresentsServer.java @@ -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); diff --git a/src/java/com/threerings/presents/server/SunSignalHandler.java b/src/java/com/threerings/presents/server/SunSignalHandler.java index 68af06296..8f9c2a5f0 100644 --- a/src/java/com/threerings/presents/server/SunSignalHandler.java +++ b/src/java/com/threerings/presents/server/SunSignalHandler.java @@ -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();