rust/src
bors 8c6ce6b91b Auto merge of #97802 - Enselic:add-no_ignore_sigkill-feature, r=joshtriplett
Support `#[unix_sigpipe = "inherit|sig_dfl"]` on `fn main()` to prevent ignoring `SIGPIPE`

When enabled, programs don't have to explicitly handle `ErrorKind::BrokenPipe` any longer. Currently, the program

```rust
fn main() { loop { println!("hello world"); } }
```

will print an error if used with a short-lived pipe, e.g.

    % ./main | head -n 1
    hello world
    thread 'main' panicked at 'failed printing to stdout: Broken pipe (os error 32)', library/std/src/io/stdio.rs:1016:9
    note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace

by enabling `#[unix_sigpipe = "sig_dfl"]` like this

```rust
#![feature(unix_sigpipe)]
#[unix_sigpipe = "sig_dfl"]
fn main() { loop { println!("hello world"); } }
```

there is no error, because `SIGPIPE` will not be ignored and thus the program will be killed appropriately:

    % ./main | head -n 1
    hello world

The current libstd behaviour of ignoring `SIGPIPE` before `fn main()` can be explicitly requested by using `#[unix_sigpipe = "sig_ign"]`.

With `#[unix_sigpipe = "inherit"]`, no change at all is made to `SIGPIPE`, which typically means the behaviour will be the same as `#[unix_sigpipe = "sig_dfl"]`.

See https://github.com/rust-lang/rust/issues/62569 and referenced issues for discussions regarding the `SIGPIPE` problem itself

See the [this](https://rust-lang.zulipchat.com/#narrow/stream/219381-t-libs/topic/Proposal.3A.20First.20step.20towards.20solving.20the.20SIGPIPE.20problem) Zulip topic for more discussions, including about this PR.

Tracking issue: https://github.com/rust-lang/rust/issues/97889
2022-09-02 21:08:08 +00:00
..
bootstrap Rollup merge of #100200 - petrochenkov:zgccld2, r=lqd,Mark-Simulacrum 2022-09-02 18:21:59 +02:00
ci Auto merge of #100935 - cuviper:upgrade-android-ci, r=Mark-Simulacrum 2022-09-02 05:32:57 +00:00
doc Auto merge of #97802 - Enselic:add-no_ignore_sigkill-feature, r=joshtriplett 2022-09-02 21:08:08 +00:00
etc Fix a bunch of typo 2022-08-31 18:24:55 +08:00
librustdoc Rollup merge of #101323 - GuillaumeGomez:remove-unused-css, r=notriddle 2022-09-02 18:22:04 +02:00
llvm-project@e3be3f64ec Patch lld for older toolchains 2022-08-11 15:51:59 -07:00
rustdoc-json-types Rollup merge of #100335 - aDotInTheVoid:rdj-resolved-path, r=GuillaumeGomez 2022-08-13 21:06:48 -07:00
test Auto merge of #97802 - Enselic:add-no_ignore_sigkill-feature, r=joshtriplett 2022-09-02 21:08:08 +00:00
tools Auto merge of #101333 - matthiaskrgr:rollup-qpf1otj, r=matthiaskrgr 2022-09-02 18:40:21 +00:00
README.md Sunset RLS 2022-08-27 21:36:08 -07:00
stage0.json Bump stage0 2022-08-29 19:30:11 +02:00
version Bump to 1.65.0 2022-08-05 11:32:46 -04:00

This directory contains the source code of the rust project, including:

  • The test suite
  • The bootstrapping build system
  • Various submodules for tools, like cargo, miri, etc.

For more information on how various parts of the compiler work, see the rustc dev guide.