Simplify graceful shutdown (#673)

This commit is contained in:
Jonas Platte 2021-12-28 16:23:07 +01:00 committed by GitHub
parent 5698fb8be9
commit 616a43aaa3
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 18 additions and 18 deletions

View file

@ -7,6 +7,7 @@
use axum::{response::Html, routing::get, Router}; use axum::{response::Html, routing::get, Router};
use std::net::SocketAddr; use std::net::SocketAddr;
use tokio::signal;
#[tokio::main] #[tokio::main]
async fn main() { async fn main() {
@ -27,29 +28,28 @@ async fn handler() -> Html<&'static str> {
Html("<h1>Hello, World!</h1>") Html("<h1>Hello, World!</h1>")
} }
#[cfg(unix)] async fn shutdown_signal() {
pub async fn shutdown_signal() { let ctrl_c = async {
use std::io; signal::ctrl_c()
use tokio::signal::unix::SignalKind; .await
.expect("failed to install Ctrl+C handler");
};
async fn terminate() -> io::Result<()> { #[cfg(unix)]
tokio::signal::unix::signal(SignalKind::terminate())? let terminate = async {
signal::unix::signal(signal::unix::SignalKind::terminate())
.expect("failed to install signal handler")
.recv() .recv()
.await; .await;
Ok(()) };
}
#[cfg(not(unix))]
let terminate = std::future::pending::<()>();
tokio::select! { tokio::select! {
_ = terminate() => {}, _ = ctrl_c => {},
_ = tokio::signal::ctrl_c() => {}, _ = terminate => {},
} }
println!("signal received, starting graceful shutdown")
}
#[cfg(windows)] println!("signal received, starting graceful shutdown");
pub async fn shutdown_signal() {
tokio::signal::ctrl_c()
.await
.expect("faild to install CTRL+C handler");
println!("signal received, starting graceful shutdown")
} }