Skip to content

Commit

Permalink
[oxlog] add sigpipe::reset (#5358)
Browse files Browse the repository at this point in the history
We have a number of CLI tools that panic when piped to things like `head`
instead of quietly exiting.  There's a long history about this within the Rust
community (see rust-lang/rust#62569), but the long
and short of it is that SIGPIPE really should be set to its default handler
(`SIG_DFL`, terminate the process) for CLI tools.

Because oxlog doesn't make any network requests, reset the SIGPIPE handler to
`SIG_DFL`.

I looked at also potentially doing this for some of our other CLI tools that
wait on network services. This should be fine to do if and only if whenever we
send data over a socket, the `MSG_NOSIGNAL` flag is set. (This causes an
`EPIPE` error to be returned, but no `SIGPIPE` signal to be generated.)

Rust does set this flag [here]. **However, as of Rust 1.77 this flag is not
set on illumos.** That's a bug and I'll fix it in Rust upstream.

[here]: https://github.com/rust-lang/rust/blob/877d36b1928b5a4f7d193517b48290ecbe404d71/library/std/src/sys_common/net.rs#L32
  • Loading branch information
sunshowers authored Apr 2, 2024
1 parent cf22afc commit 02873bd
Show file tree
Hide file tree
Showing 4 changed files with 14 additions and 0 deletions.
10 changes: 10 additions & 0 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -378,6 +378,7 @@ sha3 = "0.10.8"
shell-words = "1.1.0"
signal-hook = "0.3"
signal-hook-tokio = { version = "0.3", features = [ "futures-v0_3" ] }
sigpipe = "0.1.3"
similar-asserts = "1.5.0"
sled = "0.34"
sled-agent-client = { path = "clients/sled-agent-client" }
Expand Down
1 change: 1 addition & 0 deletions dev-tools/oxlog/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ anyhow.workspace = true
camino.workspace = true
chrono.workspace = true
clap.workspace = true
sigpipe.workspace = true
uuid.workspace = true
omicron-workspace-hack.workspace = true

Expand Down
2 changes: 2 additions & 0 deletions dev-tools/oxlog/src/bin/oxlog.rs
Original file line number Diff line number Diff line change
Expand Up @@ -57,6 +57,8 @@ struct FilterArgs {
}

fn main() -> Result<(), anyhow::Error> {
sigpipe::reset();

let cli = Cli::parse();

match cli.command {
Expand Down

0 comments on commit 02873bd

Please sign in to comment.