ODLMICRO-41: Avoid exiting on CRLF 84/92484/1
authorTejas Nevrekar <tejas.nevrekar@gmail.com>
Fri, 18 Sep 2020 18:17:32 +0000 (23:47 +0530)
committerTejas Nevrekar <tejas.nevrekar@gmail.com>
Fri, 18 Sep 2020 18:18:55 +0000 (23:48 +0530)
Add a signal handler to exit on SIGTERM

JIRA: ODLMICRO-41
Change-Id: Ide3ef9bb0501d9b8e6e25195e3237e48ca094ebf
Signed-off-by: Tejas Nevrekar <tejas.nevrekar@gmail.com>
micro-core/src/main/java/org/opendaylight/infrautils/micro/Main.java

index 8262484812e75dc944f79d490016714d3f230625..a5721ed6517850d8551ae32190abb0ff3240dbe8 100644 (file)
@@ -12,11 +12,12 @@ import com.google.inject.Injector;
 import com.google.inject.Module;
 import com.google.inject.Stage;
 import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
-import java.io.IOException;
 import org.opendaylight.odlguice.inject.PostFullSystemInjectionListener;
 import org.opendaylight.odlguice.inject.guice.extensions.closeable.CloseableInjector;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
+import sun.misc.Signal;
+import sun.misc.SignalHandler;
 
 /**
  * Simple Main.
@@ -66,12 +67,21 @@ public class Main {
         LOG.info("Shutdown complete; Guice injector closed.");
     }
 
-    public void awaitShutdown() {
+    public synchronized void awaitShutdown() {
         try {
-            LOG.info("Awaiting shutdown signal, via CR/LF on STDIN...");
-            System.in.read();
-        } catch (IOException e) {
-            LOG.error("System.in.read() failed?!", e);
+            Signal.handle(new Signal("TERM"), new SignalHandler() {
+                public void handle(Signal sig) {
+                    LOG.info("\nCaught signal. Exiting");
+                    close();
+                }
+            });
+
+            LOG.info("Awaiting shutdown signal.");
+            while (true) {
+                this.wait(2000);
+            }
+        } catch (InterruptedException ignored) {
+            LOG.info("Main Interrupted.");
         } finally {
             this.close();
         }