From aa007867b602900d7f1bf88fd22e295938318452 Mon Sep 17 00:00:00 2001 From: Cosimo Crocchini <616846+c84c@users.noreply.github.com> Date: Mon, 29 Sep 2025 13:27:25 +0200 Subject: [PATCH] feat: tilemaker-server graceful shutdown on signals (#801) --- server/Simple-Web-Server/server_http.hpp | 18 ++++++++++++++++++ server/server.cpp | 2 +- 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/server/Simple-Web-Server/server_http.hpp b/server/Simple-Web-Server/server_http.hpp index 348e9db..594ef05 100644 --- a/server/Simple-Web-Server/server_http.hpp +++ b/server/Simple-Web-Server/server_http.hpp @@ -407,6 +407,23 @@ namespace SimpleWeb { if(!io_service) { io_service = std::make_shared(); internal_io_service = true; + + // Create signal_set responding to signals + signals = std::make_shared(*io_service, SIGINT, SIGTERM); + #ifdef SIGQUIT + signals->add(SIGQUIT); + #endif + signals->async_wait( + [ref(io_service), this](const boost::system::error_code &ec, int signal_number) { + if (!ec) { + std::cout << "Signal number " << signal_number << std::endl; + std::cout << "Gracefully stopping server"<< std::endl; + io_service->stop(); + } else { + std::cout << "Error " << ec.value() << " - " << ec.message() + << " - Signal number - " << signal_number << std::endl; + } + }); } if(!acceptor) @@ -499,6 +516,7 @@ namespace SimpleWeb { std::mutex start_stop_mutex; bool internal_io_service = false; + std::shared_ptr signals; std::unique_ptr acceptor; std::vector threads; diff --git a/server/server.cpp b/server/server.cpp index 97c0271..ef9ca28 100644 --- a/server/server.cpp +++ b/server/server.cpp @@ -77,7 +77,6 @@ int main(int argc, char* argv[]) { server.config.port = port; sqlite::database db; db.init(input); - cout << "Starting local server on port " << server.config.port << endl; server.resource["^/([0-9]+)/([0-9]+)/([0-9]+).pbf$"]["GET"] = [&db](shared_ptr response, shared_ptr request) { int32_t zoom = stoi(request->path_match[1]); @@ -146,5 +145,6 @@ int main(int argc, char* argv[]) { } }; + cout << "Starting local server on port " << server.config.port << endl; server.start(); } \ No newline at end of file