From 31e4045cf7acaefc3add60d3897707f958f82cae Mon Sep 17 00:00:00 2001 From: Torsten Grote Date: Mon, 20 Aug 2018 12:46:51 -0300 Subject: [PATCH] Try to shutdown cleanly when server stops or SIGINT is received --- .../java/org/briarproject/briar/headless/BriarService.java | 4 ++++ .../main/java/org/briarproject/briar/headless/Router.java | 6 ++++++ 2 files changed, 10 insertions(+) diff --git a/briar-headless/src/main/java/org/briarproject/briar/headless/BriarService.java b/briar-headless/src/main/java/org/briarproject/briar/headless/BriarService.java index 74d2b678f..724f89752 100644 --- a/briar-headless/src/main/java/org/briarproject/briar/headless/BriarService.java +++ b/briar-headless/src/main/java/org/briarproject/briar/headless/BriarService.java @@ -106,4 +106,8 @@ public class BriarService { return password; } + public void stop() { + lifecycleManager.stopServices(); + } + } diff --git a/briar-headless/src/main/java/org/briarproject/briar/headless/Router.java b/briar-headless/src/main/java/org/briarproject/briar/headless/Router.java index b0995e39e..257d94ee0 100644 --- a/briar-headless/src/main/java/org/briarproject/briar/headless/Router.java +++ b/briar-headless/src/main/java/org/briarproject/briar/headless/Router.java @@ -14,6 +14,9 @@ import io.javalin.Javalin; import static io.javalin.ApiBuilder.get; import static io.javalin.ApiBuilder.path; import static io.javalin.ApiBuilder.post; +import static io.javalin.event.EventType.SERVER_START_FAILED; +import static io.javalin.event.EventType.SERVER_STOPPED; +import static java.lang.Runtime.getRuntime; @Immutable @Singleton @@ -35,6 +38,7 @@ public class Router { public void start() { briarService.start(); + getRuntime().addShutdownHook(new Thread(briarService::stop)); Javalin app = Javalin.create() .port(7000) @@ -42,6 +46,8 @@ public class Router { .enableStandardRequestLogging() .enableRouteOverview("/") .enableDynamicGzip() + .event(SERVER_START_FAILED, event -> briarService.stop()) + .event(SERVER_STOPPED, event -> briarService.stop()) .start(); app.routes(() -> {