mirror of
https://github.com/paradigmxyz/reth.git
synced 2026-01-31 10:08:13 -05:00
fix: unix only sigterm (#2073)
This commit is contained in:
@@ -3,7 +3,6 @@
|
||||
use futures::pin_mut;
|
||||
use reth_tasks::{TaskExecutor, TaskManager};
|
||||
use std::future::Future;
|
||||
use tokio::signal::unix::SignalKind;
|
||||
use tracing::trace;
|
||||
|
||||
/// Used to execute cli commands
|
||||
@@ -113,27 +112,39 @@ where
|
||||
Ok(tasks)
|
||||
}
|
||||
|
||||
/// Runs the future to completion or until a `ctrl-c` is received.
|
||||
/// Runs the future to completion or until:
|
||||
/// - `ctrl-c` is received.
|
||||
/// - `SIGTERM` is received (unix only).
|
||||
async fn run_until_ctrl_c<F, E>(fut: F) -> Result<(), E>
|
||||
where
|
||||
F: Future<Output = Result<(), E>>,
|
||||
E: Send + Sync + 'static + From<std::io::Error>,
|
||||
{
|
||||
let mut stream = tokio::signal::unix::signal(SignalKind::terminate())?;
|
||||
let sigterm = stream.recv();
|
||||
|
||||
let ctrl_c = tokio::signal::ctrl_c();
|
||||
|
||||
pin_mut!(sigterm, ctrl_c, fut);
|
||||
if cfg!(unix) {
|
||||
let mut stream = tokio::signal::unix::signal(tokio::signal::unix::SignalKind::terminate())?;
|
||||
let sigterm = stream.recv();
|
||||
pin_mut!(sigterm, ctrl_c, fut);
|
||||
|
||||
tokio::select! {
|
||||
_ = ctrl_c => {
|
||||
trace!(target: "reth::cli", "Received ctrl-c");
|
||||
},
|
||||
_ = sigterm => {
|
||||
trace!(target: "reth::cli", "Received SIGTERM");
|
||||
},
|
||||
res = fut => res?,
|
||||
tokio::select! {
|
||||
_ = ctrl_c => {
|
||||
trace!(target: "reth::cli", "Received ctrl-c");
|
||||
},
|
||||
_ = sigterm => {
|
||||
trace!(target: "reth::cli", "Received SIGTERM");
|
||||
},
|
||||
res = fut => res?,
|
||||
}
|
||||
} else {
|
||||
pin_mut!(ctrl_c, fut);
|
||||
|
||||
tokio::select! {
|
||||
_ = ctrl_c => {
|
||||
trace!(target: "reth::cli", "Received ctrl-c");
|
||||
},
|
||||
res = fut => res?,
|
||||
}
|
||||
}
|
||||
|
||||
Ok(())
|
||||
|
||||
Reference in New Issue
Block a user