mirror of
https://gitlab.com/fabinfra/fabaccess/bffh.git
synced 2024-11-22 14:57:56 +01:00
Move signal handler away from tokio
This commit is contained in:
parent
d1f3473ac9
commit
691338aca7
@ -14,7 +14,7 @@ futures-signals = "0.3"
|
|||||||
|
|
||||||
smol = "1.0"
|
smol = "1.0"
|
||||||
|
|
||||||
signal-hook = { version = "0.1", features = ["tokio-support"] }
|
signal-hook = "0.1"
|
||||||
|
|
||||||
slog = { version = "2.5", features = ["max_level_trace"] }
|
slog = { version = "2.5", features = ["max_level_trace"] }
|
||||||
slog-term = "2.6"
|
slog-term = "2.6"
|
||||||
|
29
src/main.rs
29
src/main.rs
@ -19,8 +19,6 @@ mod connection;
|
|||||||
mod registries;
|
mod registries;
|
||||||
mod network;
|
mod network;
|
||||||
|
|
||||||
use signal_hook::iterator::Signals;
|
|
||||||
|
|
||||||
use clap::{App, Arg};
|
use clap::{App, Arg};
|
||||||
|
|
||||||
use futures::prelude::*;
|
use futures::prelude::*;
|
||||||
@ -30,6 +28,7 @@ use futures::join;
|
|||||||
use futures::task::LocalSpawn;
|
use futures::task::LocalSpawn;
|
||||||
|
|
||||||
use smol::net::TcpListener;
|
use smol::net::TcpListener;
|
||||||
|
use smol::net::unix::UnixStream;
|
||||||
|
|
||||||
use std::io;
|
use std::io;
|
||||||
use std::io::Write;
|
use std::io::Write;
|
||||||
@ -49,11 +48,22 @@ const LMDB_MAX_DB: u32 = 16;
|
|||||||
// Returning a `Result` from `main` allows us to use the `?` shorthand.
|
// Returning a `Result` from `main` allows us to use the `?` shorthand.
|
||||||
// In the case of an Err it will be printed using `fmt::Debug`
|
// In the case of an Err it will be printed using `fmt::Debug`
|
||||||
fn main() -> Result<(), Error> {
|
fn main() -> Result<(), Error> {
|
||||||
|
|
||||||
|
let signal = Box::pin(async {
|
||||||
|
let (tx, mut rx) = UnixStream::pair()?;
|
||||||
// Initialize signal handler.
|
// Initialize signal handler.
|
||||||
// Specifically, this is a Stream of c_int representing received signals
|
|
||||||
// We currently only care about Ctrl-C so SIGINT it is.
|
// We currently only care about Ctrl-C so SIGINT it is.
|
||||||
// TODO: Make this do SIGHUP and a few others too.
|
// TODO: Make this do SIGHUP and a few others too. (By cloning the tx end of the pipe)
|
||||||
let signals = Signals::new(&[signal_hook::SIGINT])?.into_async()?;
|
signal_hook::pipe::register(signal_hook::SIGINT, tx)?;
|
||||||
|
// When a signal is received this future can complete and read a byte from the underlying
|
||||||
|
// socket — the actual data is discarded but the act of being able to receive data tells us
|
||||||
|
// that we received a SIGINT.
|
||||||
|
|
||||||
|
// FIXME: What errors are possible and how to handle them properly?
|
||||||
|
rx.read_exact(&mut [0u8]).await?;
|
||||||
|
|
||||||
|
io::Result::Ok(LoopResult::Stop)
|
||||||
|
});
|
||||||
|
|
||||||
use clap::{crate_version, crate_description, crate_name};
|
use clap::{crate_version, crate_description, crate_name};
|
||||||
|
|
||||||
@ -292,14 +302,9 @@ fn main() -> Result<(), Error> {
|
|||||||
|
|
||||||
// Check each signal as it arrives
|
// Check each signal as it arrives
|
||||||
// signals is a futures-0.1 stream, compat() makes it a futures-0.3 (which we use) stream
|
// signals is a futures-0.1 stream, compat() makes it a futures-0.3 (which we use) stream
|
||||||
let handle_signals = signals.compat().map(|_signal| {
|
|
||||||
// _signal is the signal c_int.
|
|
||||||
// But since we only listen for SIGINT at the moment we don't really need to look at
|
|
||||||
// it.
|
|
||||||
return LoopResult::Stop;
|
|
||||||
});
|
|
||||||
|
|
||||||
// Now actually check if a connection was opened or a signal recv'd
|
// Now actually check if a connection was opened or a signal recv'd
|
||||||
|
let handle_signals = signal.map(|r| { r.unwrap() }).into_stream();
|
||||||
|
|
||||||
let mut combined = stream::select(handle_signals, handle_sockets);
|
let mut combined = stream::select(handle_signals, handle_sockets);
|
||||||
|
|
||||||
// This is the basic main loop that drives execution
|
// This is the basic main loop that drives execution
|
||||||
|
Loading…
Reference in New Issue
Block a user