From 4ded1c4ab44d0111cac846063c2876ba7bb02216 Mon Sep 17 00:00:00 2001 From: Brian Picciano Date: Sat, 11 Nov 2023 21:39:40 +0100 Subject: [PATCH] Use builtin tokio ctrl-c rather than signal-hook-tokio signal-hook-tokio does not support windows, and the builtin ctrl-c function does everything domani really needs. --- Cargo.lock | 99 +++++++++++++++++++++++++++++++++++++---------------- Cargo.toml | 5 +-- src/main.rs | 21 +++++------- 3 files changed, 82 insertions(+), 43 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index d5a126b..547d6db 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -20,6 +20,15 @@ dependencies = [ "tracing-futures", ] +[[package]] +name = "addr2line" +version = "0.21.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a30b2e23b9e17a9f90641c7ab1549cd9b44f296d3ccbf309d2863cfe398a0cb" +dependencies = [ + "gimli", +] + [[package]] name = "adler" version = "1.0.2" @@ -140,6 +149,21 @@ version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" +[[package]] +name = "backtrace" +version = "0.3.69" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2089b7e3f35b9dd2d0ed921ead4f6d318c27680d4a5bd167b3ee120edb105837" +dependencies = [ + "addr2line", + "cc", + "cfg-if", + "libc", + "miniz_oxide", + "object", + "rustc-demangle", +] + [[package]] name = "base64" version = "0.13.1" @@ -503,7 +527,6 @@ dependencies = [ "serde_yaml", "sha2", "signal-hook", - "signal-hook-tokio", "tempdir", "thiserror", "tls-listener", @@ -808,6 +831,12 @@ dependencies = [ "wasi", ] +[[package]] +name = "gimli" +version = "0.28.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6fb8d784f27acf97159b40fc4db5ecd8aa23b9ad5ef69cdd136d3bc80665f0c0" + [[package]] name = "gix" version = "0.44.1" @@ -1570,7 +1599,7 @@ dependencies = [ "httpdate", "itoa", "pin-project-lite", - "socket2", + "socket2 0.4.9", "tokio", "tower-service", "tracing", @@ -1732,7 +1761,7 @@ version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bd302af1b90f2463a98fa5ad469fc212c8e3175a41c3068601bfa2727591c5be" dependencies = [ - "socket2", + "socket2 0.4.9", "widestring", "winapi", "winreg", @@ -1820,9 +1849,9 @@ dependencies = [ [[package]] name = "libc" -version = "0.2.142" +version = "0.2.150" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a987beff54b60ffa6d51982e1aa1146bc42f19bd26be28b0586f252fccf5317" +checksum = "89d92a4743f9a61002fae18374ed11e7973f530cb3a3255fb354818118b2203c" [[package]] name = "linked-hash-map" @@ -1941,14 +1970,13 @@ dependencies = [ [[package]] name = "mio" -version = "0.8.6" +version = "0.8.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b9d9a46eff5b4ff64b45a9e316a6d1e0bc719ef429cbec4dc630684212bfdf9" +checksum = "3dce281c5e46beae905d4de1870d8b1509a9142b62eedf18b443b011ca8343d0" dependencies = [ "libc", - "log", "wasi", - "windows-sys 0.45.0", + "windows-sys 0.48.0", ] [[package]] @@ -2072,6 +2100,15 @@ dependencies = [ "libc", ] +[[package]] +name = "object" +version = "0.32.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9cf5f9dd3933bd50a9e1f149ec995f39ae2c496d31fd772c1fd45ebc27e902b0" +dependencies = [ + "memchr", +] + [[package]] name = "once_cell" version = "1.17.1" @@ -2233,9 +2270,9 @@ dependencies = [ [[package]] name = "pin-project-lite" -version = "0.2.9" +version = "0.2.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e0a7ae3ac2f1173085d398531c705756c94a4c56843785df85a60c1a0afac116" +checksum = "8afb450f006bf6385ca15ef45d71d2288452bc3683ce2e2cacc0d18e4be60b58" [[package]] name = "pin-utils" @@ -2576,6 +2613,12 @@ dependencies = [ "walkdir", ] +[[package]] +name = "rustc-demangle" +version = "0.1.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d626bb9dae77e28219937af045c257c28bfd3f69333c512553507f5f9798cb76" + [[package]] name = "rustix" version = "0.37.18" @@ -2804,18 +2847,6 @@ dependencies = [ "libc", ] -[[package]] -name = "signal-hook-tokio" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "213241f76fb1e37e27de3b6aa1b068a2c333233b59cca6634f634b80a27ecf1e" -dependencies = [ - "futures-core", - "libc", - "signal-hook", - "tokio", -] - [[package]] name = "slab" version = "0.4.8" @@ -2841,6 +2872,16 @@ dependencies = [ "winapi", ] +[[package]] +name = "socket2" +version = "0.5.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7b5fac59a5cb5dd637972e5fca70daf0523c9067fcdc4842f053dae04a18f8e9" +dependencies = [ + "libc", + "windows-sys 0.48.0", +] + [[package]] name = "spin" version = "0.5.2" @@ -3005,11 +3046,11 @@ dependencies = [ [[package]] name = "tokio" -version = "1.28.1" +version = "1.34.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0aa32867d44e6f2ce3385e89dceb990188b8bb0fb25b0cf576647a6f98ac5105" +checksum = "d0c014766411e834f7af5b8f4cf46257aab4036ca95e9d2c144a10f59ad6f5b9" dependencies = [ - "autocfg", + "backtrace", "bytes", "libc", "mio", @@ -3017,16 +3058,16 @@ dependencies = [ "parking_lot", "pin-project-lite", "signal-hook-registry", - "socket2", + "socket2 0.5.5", "tokio-macros", "windows-sys 0.48.0", ] [[package]] name = "tokio-macros" -version = "2.1.0" +version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "630bdcf245f78637c13ec01ffae6187cca34625e8c63150d424b59e55af2675e" +checksum = "5b8a1e28f2deaa14e508979454cb3a223b10b938b45af148bc0986de36f1923b" dependencies = [ "proc-macro2", "quote", diff --git a/Cargo.toml b/Cargo.toml index 7fcf078..50bfc34 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -20,10 +20,9 @@ serde_json = "1.0.96" trust-dns-client = "0.22.0" mockall = "0.11.4" thiserror = "1.0.40" -tokio = { version = "1.28.1", features = [ "full", "net" ]} +tokio = { version = "1.34.0", features = ["full", "net", "signal"] } signal-hook = "0.3.15" futures = "0.3.28" -signal-hook-tokio = { version = "0.3.1", features = [ "futures-v0_3" ]} clap = { version = "4.2.7", features = ["derive", "env"] } handlebars = { version = "4.3.7", features = [ "rust-embed" ]} rust-embed = "6.6.1" @@ -49,4 +48,6 @@ gemini = "0.0.5" bytes = "1.4.0" [patch.crates-io] + +# The micropelago fork of tokio-rustls allows for gemini proxying tokio-rustls = { git = "https://code.betamike.com/micropelago/tokio-rustls.git", branch = "start-handshake-into-inner" } diff --git a/src/main.rs b/src/main.rs index 457206f..e13cbf2 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,9 +1,6 @@ #![feature(trait_upcasting)] use clap::Parser; -use futures::stream::StreamExt; -use signal_hook_tokio::Signals; - use std::path; #[derive(Parser, Debug)] @@ -195,18 +192,18 @@ async fn main() { ); } - let mut signals = - Signals::new(signal_hook::consts::TERM_SIGNALS).expect("initializing signals failed"); + tokio::signal::ctrl_c() + .await + .expect("failed to listen for kill signal"); - if (signals.next().await).is_some() { - log::info!("Gracefully shutting down..."); - } + log::info!("Gracefully shutting down..."); tokio::spawn(async move { - if (signals.next().await).is_some() { - log::warn!("Forcefully shutting down"); - std::process::exit(1); - }; + tokio::signal::ctrl_c() + .await + .expect("failed to listen for kill signal"); + log::warn!("Forcefully shutting down"); + std::process::exit(1); }); task_stack