Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Change process spawning to inherit the parent's signal mask by default #101077

Merged
merged 1 commit into from
Oct 21, 2022

Conversation

sunshowers
Copy link
Contributor

@sunshowers sunshowers commented Aug 27, 2022

Previously, the signal mask was always reset when a child process is
started. This breaks tools like nohup which expect SIGHUP to be
blocked for all transitive processes.

With this change, the default behavior changes to inherit the signal mask.

This also changes the signal disposition for SIGPIPE to only be changed if the #[unix_sigpipe] attribute isn't set.

@rust-highfive
Copy link
Collaborator

r? @Mark-Simulacrum

(rust-highfive has picked a reviewer for you, use r? to override)

@rustbot rustbot added the T-libs Relevant to the library team, which will review and decide on the PR/issue. label Aug 27, 2022
@rust-highfive rust-highfive added the S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. label Aug 27, 2022
@sunshowers
Copy link
Contributor Author

r? @thomcc

@sunshowers
Copy link
Contributor Author

sunshowers commented Aug 27, 2022

(I don't know of a way to represent the stack cleanly in GitHub, unlike in Gerrit, Phabricator's Differential or other tools.)

@thomcc
Copy link
Member

thomcc commented Aug 27, 2022

Ideally it would be cleanly separated from the other (I know this is a bit of a pain). That would make it easier to FCP and land on its own.

@sunshowers
Copy link
Contributor Author

sunshowers commented Aug 27, 2022

It's not really possible to cleanly separate. Best one could do is to change the ordering so that #100737 depends on this rather than the other way round.

To avoid duplicated work I would like to skip doing that for now. I'd be happy to do that after the FCP regarding this is approved.

@thomcc
Copy link
Member

thomcc commented Aug 27, 2022

Sure. I'll assign to someone who can start an FCP for this (I really need to get to rust-lang/rfcbot-rs#306... maybe on Monday...). For their context, this is based on this comment from @zackw: #100737 (comment)

r? @joshtriplett

@bors
Copy link
Contributor

bors commented Aug 29, 2022

☔ The latest upstream changes (presumably #100786) made this pull request unmergeable. Please resolve the merge conflicts.

@sunshowers
Copy link
Contributor Author

Is there anything blocking this? @joshtriplett @thomcc

Once this is accepted I'd be happy to change the ordering of the PRs and resolve merge conflicts, etc.

@joshtriplett
Copy link
Member

I think the handling for SIGPIPE needs some updates, for two reasons:

@joshtriplett
Copy link
Member

@rustbot author

@rustbot
Copy link
Collaborator

rustbot commented Sep 11, 2022

Error: The "Author" shortcut only works on pull requests.

Please file an issue on GitHub at triagebot if there's a problem with this bot, or reach out on #t-infra on Zulip.

@joshtriplett joshtriplett added S-waiting-on-author Status: This is awaiting some action (such as code changes or more information) from the author. and removed S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. labels Sep 11, 2022
@Enselic
Copy link
Member

Enselic commented Sep 11, 2022

This should take Support #[unix_sigpipe = "inherit|sig_dfl"] on fn main() to prevent ignoring SIGPIPE #97802 into account, rather than unconditionally unblocking.

Would you mind elaborating a bit on that please? In my mind that attribute only affects what the runtime does to SIGPIPE before fn main() is invoked. I don't think it should affect the spawning of child processes? (Except indirectly)

@joshtriplett
Copy link
Member

"except indirectly" is exactly my concern here. Right now, and with this patch, Rust resets SIGPIPE to default in the child process. I think if the user sets the sigpipe disposition with that attribute, we should allow that to be inherited unless overridden.

@Enselic Enselic mentioned this pull request Sep 11, 2022
23 tasks
@Enselic
Copy link
Member

Enselic commented Sep 11, 2022

Hmm, in that case we should probably make #[unix_sigpipe = "..."] a module attribute rather than an attribute on fn main(), because otherwise the behaviour of inheritance of parent signal masks can't be configured for library code. But if we make it an attribute that can be used with libraries, how do we handle when two different libraries that are in use choose different values on the attribute?

To me, these problems suggest that the #[unix_sigpipe = "..." "belongs" to fn main(), since without an fn main(), no code is generated that can configure SIGPIPE before fn main() is invoked.

I think it is useful to think about what we would do if the Rust runtime would never have started to touch SIGPIPE in 2014. If that would have been the case, how would we have written the code in this PR? And I think the answer to that is "we do not treat SIGPIPE any different than any other signal", so that seems to me to be what we should do also today here.

But I am of course open to be convinced otherwise.

@joshtriplett
Copy link
Member

joshtriplett commented Sep 12, 2022

@Enselic I agree, and I wish we could do that, but I think that would break backwards compatibility at the moment.

I'm proposing that if something sets the attribute at all, regardless of the value they set it to, we treat that as an opt in to not touching the signal here.

If a library wants to treat sigpipe differently, it can call block_signal or similar, which this code should respect.

@sunshowers
Copy link
Contributor Author

I've been away for a bit. Going to tackle this in the next few days.

@sunshowers
Copy link
Contributor Author

sunshowers commented Sep 23, 2022

@joshtriplett Some questions:

  1. How should reset_sigpipe:

    unsafe fn reset_sigpipe(#[allow(unused_variables)] sigpipe: u8) {
    #[cfg(not(any(target_os = "emscripten", target_os = "fuchsia", target_os = "horizon")))]
    {
    // We don't want to add this as a public type to libstd, nor do we
    // want to `include!` a file from the compiler (which would break
    // Miri and xargo for example), so we choose to duplicate these
    // constants from `compiler/rustc_session/src/config/sigpipe.rs`.
    // See the other file for docs. NOTE: Make sure to keep them in
    // sync!
    mod sigpipe {
    pub const INHERIT: u8 = 1;
    pub const SIG_IGN: u8 = 2;
    pub const SIG_DFL: u8 = 3;
    }
    let handler = match sigpipe {
    sigpipe::INHERIT => None,
    sigpipe::SIG_IGN => Some(libc::SIG_IGN),
    sigpipe::SIG_DFL => Some(libc::SIG_DFL),
    _ => unreachable!(),
    };
    if let Some(handler) = handler {
    rtassert!(signal(libc::SIGPIPE, handler) != libc::SIG_ERR);
    }
    }
    }

    communicate with process spawning code? My first thought was to use a static AtomicBool, but I'm wondering if it'll run into issues given how early in the process this happens. Do you have other/better suggestions? Note that simply fetching the current signal disposition will not work, because we need to differentiate between #[unix_sigpipe = "sig_ign"] and no attribute specified.

  2. Note that this PR touches setsigmask (AIUI a mask of signals currently blocked from delivery, though can be delivered in the future), not setsigdefault (signals that are reset to default signal handling, but which can still potentially be temporarily blocked by my understanding). If block_signal is called, that doesn't directly affect setsigdefault, only setsigmask.

    1. How should the behavior of setsigdefault change under block_signal?
    2. If SIGPIPE is currently blocked in this process, and unblock_signal is called, what should happen to the behavior of setsigdefault?
  3. What's the best way to test this behavior? It seems like there are a number of different combinations involved here.

@bors
Copy link
Contributor

bors commented Oct 21, 2022

☀️ Test successful - checks-actions
Approved by: sunshowers
Pushing 57e2c06 to master...

@bors bors added the merged-by-bors This PR was explicitly merged by bors. label Oct 21, 2022
@bors bors merged commit 57e2c06 into rust-lang:master Oct 21, 2022
@rustbot rustbot added this to the 1.66.0 milestone Oct 21, 2022
@joshtriplett joshtriplett added the relnotes Marks issues that should be documented in the release notes of the next release. label Oct 21, 2022
@sunshowers sunshowers deleted the signal-mask-inherit branch October 21, 2022 21:01
@rust-timer
Copy link
Collaborator

Finished benchmarking commit (57e2c06): comparison URL.

Overall result: no relevant changes - no action needed

@rustbot label: -perf-regression

Instruction count

This benchmark run did not return any relevant results for this metric.

Max RSS (memory usage)

This benchmark run did not return any relevant results for this metric.

Cycles

This benchmark run did not return any relevant results for this metric.

sunshowers added a commit to sunshowers/nextest that referenced this pull request Nov 7, 2022
This is only really useful with Rust 1.66+ (currently in beta), which
has rust-lang/rust#101077. But let's get this in
so we can experiment with it.
sunshowers added a commit to sunshowers/nextest that referenced this pull request Nov 7, 2022
This is only really useful with Rust 1.66+ (currently in beta), which
has rust-lang/rust#101077. But let's get this in
so we can experiment with it.
sunshowers added a commit to sunshowers/nextest that referenced this pull request Nov 7, 2022
This is only really useful with Rust 1.66+ (currently in beta), which
has rust-lang/rust#101077. But let's get this in
so we can experiment with it.
sunshowers added a commit to sunshowers/nextest that referenced this pull request Nov 7, 2022
This is only really useful with Rust 1.66+ (currently in beta), which
has rust-lang/rust#101077. But let's get this in
so we can experiment with it.
sunshowers added a commit to nextest-rs/nextest that referenced this pull request Nov 8, 2022
This is only really useful with Rust 1.66+ (currently in beta), which
has rust-lang/rust#101077. But let's get this in
so we can experiment with it.
wip-sync pushed a commit to NetBSD/pkgsrc-wip that referenced this pull request Dec 21, 2022
Perform a bunch of pkglint cleanup while here, and bump bootstrap kits
to 1.65.0.

Version 1.66.0 (2022-12-15)
==========================

Language
--------
- [Permit specifying explicit discriminants on all `repr(Int)`
  enums](rust-lang/rust#95710)
  ```rust
  #[repr(u8)]
  enum Foo {
      A(u8) = 0,
      B(i8) = 1,
      C(bool) = 42,
  }
  ```
- [Allow transmutes between the same type differing only in
  lifetimes](rust-lang/rust#101520)
- [Change constant evaluation errors from a deny-by-default lint to a
  hard error](rust-lang/rust#102091)
- [Trigger `must_use` on `impl Trait` for
  supertraits](rust-lang/rust#102287) This
  makes `impl ExactSizeIterator` respect the existing `#[must_use]`
  annotation on `Iterator`.
- [Allow `..X` and `..=X` in
  patterns](rust-lang/rust#102275)
- [Uplift `clippy::for_loops_over_fallibles` lint into
  rustc](rust-lang/rust#99696)
- [Stabilize `sym` operands in inline
  assembly](rust-lang/rust#103168)
- [Update to Unicode 15](rust-lang/rust#101912)
- [Opaque types no longer imply lifetime
  bounds](rust-lang/rust#95474) This is a
  soundness fix which may break code that was erroneously relying on this
  behavior.

Compiler
--------
- [Add armv5te-none-eabi and thumbv5te-none-eabi tier 3
  targets](rust-lang/rust#101329)
  - Refer to Rust's [platform support page][platform-support-doc] for
    more information on Rust's tiered platform support.
- [Add support for linking against macOS universal
  libraries](rust-lang/rust#98736)

Libraries
---------
- [Fix `#[derive(Default)]` on a generic `#[default]` enum adding
  unnecessary `Default`
  bounds](rust-lang/rust#101040)
- [Update to Unicode 15](rust-lang/rust#101821)

Stabilized APIs
---------------
- [`proc_macro::Span::source_text`](https://doc.rust-lang.org/stable/proc_macro/struct.Span.html#method.source_text)
- [`uX::{checked_add_signed, overflowing_add_signed,
  saturating_add_signed,
  wrapping_add_signed}`](https://doc.rust-lang.org/stable/std/primitive.u8.html#method.checked_add_signed)
- [`iX::{checked_add_unsigned, overflowing_add_unsigned,
  saturating_add_unsigned,
  wrapping_add_unsigned}`](https://doc.rust-lang.org/stable/std/primitive.i8.html#method.checked_add_unsigned)
- [`iX::{checked_sub_unsigned, overflowing_sub_unsigned,
  saturating_sub_unsigned,
  wrapping_sub_unsigned}`](https://doc.rust-lang.org/stable/std/primitive.i8.html#method.checked_sub_unsigned)
- [`BTreeSet::{first, last, pop_first,
  pop_last}`](https://doc.rust-lang.org/stable/std/collections/struct.BTreeSet.html#method.first)
- [`BTreeMap::{first_key_value, last_key_value, first_entry, last_entry,
  pop_first,
  pop_last}`](https://doc.rust-lang.org/stable/std/collections/struct.BTreeMap.html#method.first_key_value)
- [Add `AsFd` implementations for stdio lock types on
  WASI.](rust-lang/rust#101768)
- [`impl TryFrom<Vec<T>> for Box<[T;
  N]>`](https://doc.rust-lang.org/stable/std/boxed/struct.Box.html#impl-TryFrom%3CVec%3CT%2C%20Global%3E%3E-for-Box%3C%5BT%3B%20N%5D%2C%20Global%3E)
- [`core::hint::black_box`](https://doc.rust-lang.org/stable/std/hint/fn.black_box.html)
- [`Duration::try_from_secs_{f32,f64}`](https://doc.rust-lang.org/stable/std/time/struct.Duration.html#method.try_from_secs_f32)
- [`Option::unzip`](https://doc.rust-lang.org/stable/std/option/enum.Option.html#method.unzip)
- [`std::os::fd`](https://doc.rust-lang.org/stable/std/os/fd/index.html)

Rustdoc
-------
- [Add Rustdoc warning for invalid HTML tags in the
  documentation](rust-lang/rust#101720)

Cargo
-----
- [Added `cargo remove` to remove dependencies from
  Cargo.toml](https://doc.rust-lang.org/nightly/cargo/commands/cargo-remove.html)
- [`cargo publish` now waits for the new version to be downloadable
  before exiting](rust-lang/cargo#11062)

See [detailed release notes](https://github.com/rust-lang/cargo/blob/master/CHANGELOG.md#cargo-166-2022-12-15) for more.

Compatibility Notes
-------------------
- [Only apply `ProceduralMasquerade` hack to older versions of
  `rental`](rust-lang/rust#94063)
- [Don't export `__heap_base` and `__data_end` on
  wasm32-wasi.](rust-lang/rust#102385)
- [Don't export `__wasm_init_memory` on
  WebAssembly.](rust-lang/rust#102426)
- [Only export `__tls_*` on
  wasm32-unknown-unknown.](rust-lang/rust#102440)
- [Don't link to `libresolv` in libstd on
  Darwin](rust-lang/rust#102766)
- [Update libstd's libc to 0.2.135 (to make `libstd` no longer pull in
  `libiconv.dylib` on
  Darwin)](rust-lang/rust#103277)
- [Opaque types no longer imply lifetime
  bounds](rust-lang/rust#95474)
  This is a soundness fix which may break code that was erroneously
  relying on this behavior.
- [Make `order_dependent_trait_objects` show up in future-breakage
  reports](rust-lang/rust#102635)
- [Change std::process::Command spawning to default to inheriting the
  parent's signal mask](rust-lang/rust#101077)

Internal Changes
----------------

These changes do not affect any public interfaces of Rust, but they
represent significant improvements to the performance or internals of
rustc and related tools.

- [Enable BOLT for LLVM
  compilation](rust-lang/rust#94381)
- [Enable LTO for
  rustc_driver.so](rust-lang/rust#101403)
@apiraino apiraino removed the to-announce Announce this issue on triage meeting label Jan 5, 2023
netbsd-srcmastr pushed a commit to NetBSD/pkgsrc that referenced this pull request Jan 23, 2023
Pkgsrc changes:
 * pkglint cleanups, bump bootstrap kits to 1.65.0.
 * New target: mipsel-unknown-netbsd, for cpu=mips32 with soft-float.
 * Managed to retain the build of aarch64_be, llvm needed a patch to
   avoid use of neon instructions in the BE case (llvm doesn't support
   use of neon in BE mode).  Ref. patch to
   src/llvm-project/llvm/lib/Support/BLAKE3/blake3_impl.h.
   Also submitted upstream of LLVM to the BLAKE3 maintainers.
 * The minimum gcc version is now 7.x, and that includes the
   cross-compiler for the targets.  For i386 this also needs to
   /usr/include/gcc-7 include files in the target root, because
   immintrin.h from gcc 5 is not compatible with gcc 7.x.  This
   applies for the targets where we build against a root from netbsd-8
   (sparc64, powerpc, i386), and files/gcc-wrap gets a hack for this.
 * Pick up tweak for -latomic inclusion from
   rust-lang/rust#104220
   and
   rust-lang/rust#104572
 * Retain ability to do 32-bit NetBSD, by changing from 64 to 32 bit
   types in library/std/src/sys/unix/thread_parker/netbsd.rs.
 * I've tried to get the "openssl-src" build with -latomic where it's
   needed.  I've introduced the "NetBSD-generic32" system type and use
   it for the NetBSD mipsel target.  There is another attempt to do
   the same in the patch to vendor/openssl-sys/build/main.rs.


Upstream changes:

Version 1.66.1 (2023-01-10)
===========================

- Added validation of SSH host keys for git URLs in Cargo
  ([CVE-2022-46176](https://www.cve.org/CVERecord?id=CVE-2022-46176))


Version 1.66.0 (2022-12-15)
===========================

Language
--------
- [Permit specifying explicit discriminants on all `repr(Int)`
  enums](rust-lang/rust#95710)
  ```rust
  #[repr(u8)]
  enum Foo {
      A(u8) = 0,
      B(i8) = 1,
      C(bool) = 42,
  }
  ```
- [Allow transmutes between the same type differing only in
  lifetimes](rust-lang/rust#101520)
- [Change constant evaluation errors from a deny-by-default lint to a
  hard error](rust-lang/rust#102091)
- [Trigger `must_use` on `impl Trait` for
  supertraits](rust-lang/rust#102287) This
  makes `impl ExactSizeIterator` respect the existing `#[must_use]`
  annotation on `Iterator`.
- [Allow `..X` and `..=X` in
  patterns](rust-lang/rust#102275)
- [Uplift `clippy::for_loops_over_fallibles` lint into
  rustc](rust-lang/rust#99696)
- [Stabilize `sym` operands in inline
  assembly](rust-lang/rust#103168)
- [Update to Unicode 15](rust-lang/rust#101912)
- [Opaque types no longer imply lifetime
  bounds](rust-lang/rust#95474) This is a
  soundness fix which may break code that was erroneously relying on this
  behavior.

Compiler
--------
- [Add armv5te-none-eabi and thumbv5te-none-eabi tier 3
  targets](rust-lang/rust#101329)
  - Refer to Rust's [platform support page][platform-support-doc] for
    more information on Rust's tiered platform support.
- [Add support for linking against macOS universal
  libraries](rust-lang/rust#98736)

Libraries
---------
- [Fix `#[derive(Default)]` on a generic `#[default]` enum adding
  unnecessary `Default`
  bounds](rust-lang/rust#101040)
- [Update to Unicode 15](rust-lang/rust#101821)

Stabilized APIs
---------------
- [`proc_macro::Span::source_text`](https://doc.rust-lang.org/stable/proc_macro/struct.Span.html#method.source_text)
- [`uX::{checked_add_signed, overflowing_add_signed,
  saturating_add_signed,
  wrapping_add_signed}`](https://doc.rust-lang.org/stable/std/primitive.u8.html#method.checked_add_signed)
- [`iX::{checked_add_unsigned, overflowing_add_unsigned,
  saturating_add_unsigned,
  wrapping_add_unsigned}`](https://doc.rust-lang.org/stable/std/primitive.i8.html#method.checked_add_unsigned)
- [`iX::{checked_sub_unsigned, overflowing_sub_unsigned,
  saturating_sub_unsigned,
  wrapping_sub_unsigned}`](https://doc.rust-lang.org/stable/std/primitive.i8.html#method.checked_sub_unsigned)
- [`BTreeSet::{first, last, pop_first,
  pop_last}`](https://doc.rust-lang.org/stable/std/collections/struct.BTreeSet.html#method.first)
- [`BTreeMap::{first_key_value, last_key_value, first_entry, last_entry,
  pop_first,
  pop_last}`](https://doc.rust-lang.org/stable/std/collections/struct.BTreeMap.html#method.first_key_value)
- [Add `AsFd` implementations for stdio lock types on
  WASI.](rust-lang/rust#101768)
- [`impl TryFrom<Vec<T>> for Box<[T;
  N]>`](https://doc.rust-lang.org/stable/std/boxed/struct.Box.html#impl-TryFrom%3CVec%3CT%2C%20Global%3E%3E-for-Box%3C%5BT%3B%20N%5D%2C%20Global%3E)
- [`core::hint::black_box`](https://doc.rust-lang.org/stable/std/hint/fn.black_box.html)
- [`Duration::try_from_secs_{f32,f64}`](https://doc.rust-lang.org/stable/std/time/struct.Duration.html#method.try_from_secs_f32)
- [`Option::unzip`](https://doc.rust-lang.org/stable/std/option/enum.Option.html#method.unzip)
- [`std::os::fd`](https://doc.rust-lang.org/stable/std/os/fd/index.html)

Rustdoc
-------
- [Add Rustdoc warning for invalid HTML tags in the
  documentation](rust-lang/rust#101720)

Cargo
-----
- [Added `cargo remove` to remove dependencies from
  Cargo.toml](https://doc.rust-lang.org/nightly/cargo/commands/cargo-remove.html)
- [`cargo publish` now waits for the new version to be downloadable
  before exiting](rust-lang/cargo#11062)

See [detailed release notes](https://github.com/rust-lang/cargo/blob/master/CHANGELOG.md#cargo-166-2022-12-15) for more.

Compatibility Notes
-------------------
- [Only apply `ProceduralMasquerade` hack to older versions of
  `rental`](rust-lang/rust#94063)
- [Don't export `__heap_base` and `__data_end` on
  wasm32-wasi.](rust-lang/rust#102385)
- [Don't export `__wasm_init_memory` on
  WebAssembly.](rust-lang/rust#102426)
- [Only export `__tls_*` on
  wasm32-unknown-unknown.](rust-lang/rust#102440)
- [Don't link to `libresolv` in libstd on
  Darwin](rust-lang/rust#102766)
- [Update libstd's libc to 0.2.135 (to make `libstd` no longer pull in
  `libiconv.dylib` on
  Darwin)](rust-lang/rust#103277)
- [Opaque types no longer imply lifetime
  bounds](rust-lang/rust#95474)
  This is a soundness fix which may break code that was erroneously
  relying on this behavior.
- [Make `order_dependent_trait_objects` show up in future-breakage
  reports](rust-lang/rust#102635)
- [Change std::process::Command spawning to default to inheriting the
  parent's signal mask](rust-lang/rust#101077)

Internal Changes
----------------

These changes do not affect any public interfaces of Rust, but they
represent significant improvements to the performance or internals of
rustc and related tools.

- [Enable BOLT for LLVM
  compilation](rust-lang/rust#94381)
- [Enable LTO for
  rustc_driver.so](rust-lang/rust#101403)


Version 1.65.0 (2022-11-03)
==========================

Language
--------
- [Error on `as` casts of enums with `#[non_exhaustive]` variants]
  (rust-lang/rust#92744)
- [Stabilize `let else`](rust-lang/rust#93628)
- [Stabilize generic associated types (GATs)]
  (rust-lang/rust#96709)
- [Add lints `let_underscore_drop`, `let_underscore_lock`, and
  `let_underscore_must_use` from Clippy]
  (rust-lang/rust#97739)
- [Stabilize `break`ing from arbitrary labeled blocks ("label-break-value")]
  (rust-lang/rust#99332)
- [Uninitialized integers, floats, and raw pointers are now considered
  immediate UB](rust-lang/rust#98919).
  Usage of `MaybeUninit` is the correct way to work with uninitialized
  memory.
- [Stabilize raw-dylib for Windows x86_64, aarch64, and thumbv7a]
  (rust-lang/rust#99916)
- [Do not allow `Drop` impl on foreign ADTs]
  (rust-lang/rust#99576)

Compiler
--------
- [Stabilize -Csplit-debuginfo on Linux]
  (rust-lang/rust#98051)
- [Use niche-filling optimization even when multiple variants have
  data] (rust-lang/rust#94075)
- [Associated type projections are now verified to be well-formed
  prior to resolving the underlying type]
  (rust-lang/rust#99217)
- [Stringify non-shorthand visibility correctly]
  (rust-lang/rust#100350)
- [Normalize struct field types when unsizing]
  (rust-lang/rust#101831)
- [Update to LLVM 15](rust-lang/rust#99464)
- [Fix aarch64 call abi to correctly zeroext when needed]
  (rust-lang/rust#97800)
- [debuginfo: Generalize C++-like encoding for enums]
  (rust-lang/rust#98393)
- [Add `special_module_name` lint]
  (rust-lang/rust#94467)
- [Add support for generating unique profraw files by default when
  using `-C instrument-coverage`]
  (rust-lang/rust#100384)
- [Allow dynamic linking for iOS/tvOS targets]
  (rust-lang/rust#100636)

New targets:
- [Add armv4t-none-eabi as a tier 3 target]
  (rust-lang/rust#100244)
- [Add powerpc64-unknown-openbsd and riscv64-unknown-openbsd as tier 3 targets]
  (rust-lang/rust#101025)
- Refer to Rust's [platform support page][platform-support-doc] for more
  information on Rust's tiered platform support.

Libraries
---------
- [Don't generate `PartialEq::ne` in derive(PartialEq)]
  (rust-lang/rust#98655)
- [Windows RNG: Use `BCRYPT_RNG_ALG_HANDLE` by default]
  (rust-lang/rust#101325)
- [Forbid mixing `System` with direct system allocator calls]
  (rust-lang/rust#101394)
- [Document no support for writing to non-blocking stdio/stderr]
  (rust-lang/rust#101416)
- [`std::layout::Layout` size must not overflow `isize::MAX` when
  rounded up to `align`](rust-lang/rust#95295)
  This also changes the safety conditions on
  `Layout::from_size_align_unchecked`.

Stabilized APIs
---------------
- [`std::backtrace::Backtrace`]
  (https://doc.rust-lang.org/stable/std/backtrace/struct.Backtrace.html)
- [`Bound::as_ref`]
  (https://doc.rust-lang.org/stable/std/ops/enum.Bound.html#method.as_ref)
- [`std::io::read_to_string`]
  (https://doc.rust-lang.org/stable/std/io/fn.read_to_string.html)
- [`<*const T>::cast_mut`]
  (https://doc.rust-lang.org/stable/std/primitive.pointer.html#method.cast_mut)
- [`<*mut T>::cast_const`]
  (https://doc.rust-lang.org/stable/std/primitive.pointer.html#method.cast_const)

These APIs are now stable in const contexts:
- [`<*const T>::offset_from`]
  (https://doc.rust-lang.org/stable/std/primitive.pointer.html#method.offset_from)
- [`<*mut T>::offset_from`]
  (https://doc.rust-lang.org/stable/std/primitive.pointer.html#method.offset_from)

Cargo
-----
- [Apply GitHub fast path even for partial hashes]
  (rust-lang/cargo#10807)
- [Do not add home bin path to PATH if it's already there]
  (rust-lang/cargo#11023)
- [Take priority into account within the pending queue]
  (rust-lang/cargo#11032).
  This slightly optimizes job scheduling by Cargo, with typically
  small improvements on larger crate graph builds.

Compatibility Notes
-------------------
- [`std::layout::Layout` size must not overflow `isize::MAX` when
  rounded up to `align`] (rust-lang/rust#95295).
  This also changes the safety conditions on
  `Layout::from_size_align_unchecked`.
- [`PollFn` now only implements `Unpin` if the closure is `Unpin`]
  (rust-lang/rust#102737).
  This is a possible breaking change if users were relying on the
  blanket unpin implementation.  See discussion on the PR for
  details of why this change was made.
- [Drop ExactSizeIterator impl from std::char::EscapeAscii]
  (rust-lang/rust#99880)
  This is a backwards-incompatible change to the standard library's
  surface area, but is unlikely to affect real world usage.
- [Do not consider a single repeated lifetime eligible for elision
  in the return type] (rust-lang/rust#103450)
  This behavior was unintentionally changed in 1.64.0, and this
  release reverts that change by making this an error again.
- [Reenable disabled early syntax gates as future-incompatibility
  lints] (rust-lang/rust#99935)
- [Update the minimum external LLVM to 13]
  (rust-lang/rust#100460)
- [Don't duplicate file descriptors into stdio fds]
  (rust-lang/rust#101426)
- [Sunset RLS](rust-lang/rust#100863)
- [Deny usage of `#![cfg_attr(..., crate_type = ...)]` to set the
  crate type] (rust-lang/rust#99784)
  This strengthens the forward compatibility lint
  deprecated_cfg_attr_crate_type_name to deny.
- [`llvm-has-rust-patches` allows setting the build system to treat
  the LLVM as having Rust-specific patches]
  (rust-lang/rust#101072)
  This option may need to be set for distributions that are building
  Rust with a patched LLVM via `llvm-config`, not the built-in
  LLVM.

Internal Changes
----------------

These changes do not affect any public interfaces of Rust, but they represent
significant improvements to the performance or internals of rustc and related
tools.

- [Add `x.sh` and `x.ps1` shell scripts]
  (rust-lang/rust#99992)
- [compiletest: use target cfg instead of hard-coded tables]
  (rust-lang/rust#100260)
- [Use object instead of LLVM for reading bitcode from rlibs]
  (rust-lang/rust#98100)
- [Enable MIR inlining for optimized compilations]
  (rust-lang/rust#91743)
  This provides a 3-10% improvement in compiletimes for real world
  crates. See [perf results]
  (https://perf.rust-lang.org/compare.html?start=aedf78e56b2279cc869962feac5153b6ba7001ed&end=0075bb4fad68e64b6d1be06bf2db366c30bc75e1&stat=instructions:u).
@passcod
Copy link
Contributor

passcod commented Feb 13, 2023

Just some feedback that this broke cargo-watch as we set sigmask on the parent process and relied on the sigmask reset for children to run them as the user expected.

@sunshowers
Copy link
Contributor Author

sunshowers commented Feb 13, 2023

You can fix it locally by temporarily setting the right sigmask in the spawning thread. See https://github.com/nextest-rs/nextest/blob/2505a731eadd7b7bc7355a53e753a05d822a358d/nextest-runner/src/double_spawn.rs#L167 for an example.

It's certainly a breaking change, but the old behavior was incorrect.

@passcod
Copy link
Contributor

passcod commented Feb 13, 2023

It just seems weird because the previous thing was deliberately done: #25784

jasonheath pushed a commit to habitat-sh/habitat that referenced this pull request Mar 1, 2023
jasonheath pushed a commit to habitat-sh/habitat that referenced this pull request Mar 1, 2023
- Address Clippy warnings while upgrading from 1.62.1 to 1.67.1
- A fix for the change in signal masking introduced in rust-lang/rust#101077
- Changes to address an instance of https://rust-lang.github.io/rust-clippy/master/index.html\#result_large_err

Signed-off-by: Jason Heath <[email protected]>
jasonheath pushed a commit to habitat-sh/habitat that referenced this pull request Mar 2, 2023
- Address Clippy warnings while upgrading from 1.62.1 to 1.67.1
- A fix for the change in signal masking introduced in rust-lang/rust#101077
- Changes to address an instance of https://rust-lang.github.io/rust-clippy/master/index.html\#result_large_err

Signed-off-by: Jason Heath <[email protected]>
jasonheath pushed a commit to habitat-sh/habitat that referenced this pull request Mar 2, 2023
- Address Clippy warnings while upgrading from 1.62.1 to 1.67.1
- A fix for the change in signal masking introduced in rust-lang/rust#101077
- Changes to address an instance of https://rust-lang.github.io/rust-clippy/master/index.html\#result_large_err

Signed-off-by: Jason Heath <[email protected]>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
A-testsuite Area: The testsuite used to check the correctness of rustc disposition-merge This issue / PR is in PFCP or FCP with a disposition to merge it. finished-final-comment-period The final comment period is finished for this PR / Issue. merged-by-bors This PR was explicitly merged by bors. relnotes Marks issues that should be documented in the release notes of the next release. S-waiting-on-bors Status: Waiting on bors to run and complete tests. Bors will change the label on completion. T-libs Relevant to the library team, which will review and decide on the PR/issue.
Projects
None yet
Development

Successfully merging this pull request may close these issues.