From 616a43aaa301d22961ab33d1bba3c2b13c657c1d Mon Sep 17 00:00:00 2001 From: Jonas Platte Date: Tue, 28 Dec 2021 16:23:07 +0100 Subject: [PATCH] Simplify graceful shutdown (#673) --- .../Cargo.toml | 0 .../src/main.rs | 36 +++++++++---------- 2 files changed, 18 insertions(+), 18 deletions(-) rename examples/{graceful_shutdown => graceful-shutdown}/Cargo.toml (100%) rename examples/{graceful_shutdown => graceful-shutdown}/src/main.rs (56%) diff --git a/examples/graceful_shutdown/Cargo.toml b/examples/graceful-shutdown/Cargo.toml similarity index 100% rename from examples/graceful_shutdown/Cargo.toml rename to examples/graceful-shutdown/Cargo.toml diff --git a/examples/graceful_shutdown/src/main.rs b/examples/graceful-shutdown/src/main.rs similarity index 56% rename from examples/graceful_shutdown/src/main.rs rename to examples/graceful-shutdown/src/main.rs index dd20f19c..3704889a 100644 --- a/examples/graceful_shutdown/src/main.rs +++ b/examples/graceful-shutdown/src/main.rs @@ -7,6 +7,7 @@ use axum::{response::Html, routing::get, Router}; use std::net::SocketAddr; +use tokio::signal; #[tokio::main] async fn main() { @@ -27,29 +28,28 @@ async fn handler() -> Html<&'static str> { Html("

Hello, World!

") } -#[cfg(unix)] -pub async fn shutdown_signal() { - use std::io; - use tokio::signal::unix::SignalKind; +async fn shutdown_signal() { + let ctrl_c = async { + signal::ctrl_c() + .await + .expect("failed to install Ctrl+C handler"); + }; - async fn terminate() -> io::Result<()> { - tokio::signal::unix::signal(SignalKind::terminate())? + #[cfg(unix)] + let terminate = async { + signal::unix::signal(signal::unix::SignalKind::terminate()) + .expect("failed to install signal handler") .recv() .await; - Ok(()) - } + }; + + #[cfg(not(unix))] + let terminate = std::future::pending::<()>(); tokio::select! { - _ = terminate() => {}, - _ = tokio::signal::ctrl_c() => {}, + _ = ctrl_c => {}, + _ = terminate => {}, } - println!("signal received, starting graceful shutdown") -} -#[cfg(windows)] -pub async fn shutdown_signal() { - tokio::signal::ctrl_c() - .await - .expect("faild to install CTRL+C handler"); - println!("signal received, starting graceful shutdown") + println!("signal received, starting graceful shutdown"); }