feat: tilemaker-server graceful shutdown on signals (#801)

This commit is contained in:
Cosimo Crocchini
2025-09-29 13:27:25 +02:00
committed by GitHub
parent 830f85c3e1
commit aa007867b6
2 changed files with 19 additions and 1 deletions
+18
View File
@@ -407,6 +407,23 @@ namespace SimpleWeb {
if(!io_service) { if(!io_service) {
io_service = std::make_shared<io_context>(); io_service = std::make_shared<io_context>();
internal_io_service = true; internal_io_service = true;
// Create signal_set responding to signals
signals = std::make_shared<boost::asio::signal_set>(*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) if(!acceptor)
@@ -499,6 +516,7 @@ namespace SimpleWeb {
std::mutex start_stop_mutex; std::mutex start_stop_mutex;
bool internal_io_service = false; bool internal_io_service = false;
std::shared_ptr<boost::asio::signal_set> signals;
std::unique_ptr<asio::ip::tcp::acceptor> acceptor; std::unique_ptr<asio::ip::tcp::acceptor> acceptor;
std::vector<std::thread> threads; std::vector<std::thread> threads;
+1 -1
View File
@@ -77,7 +77,6 @@ int main(int argc, char* argv[]) {
server.config.port = port; server.config.port = port;
sqlite::database db; sqlite::database db;
db.init(input); 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<HttpServer::Response> response, shared_ptr<HttpServer::Request> request) { server.resource["^/([0-9]+)/([0-9]+)/([0-9]+).pbf$"]["GET"] = [&db](shared_ptr<HttpServer::Response> response, shared_ptr<HttpServer::Request> request) {
int32_t zoom = stoi(request->path_match[1]); 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(); server.start();
} }