[roll] Roll fuchsia [starnix] Fix lock ordering in controlling terminal disassociation

The `disassociate_controlling_terminal` function iterates through thread
groups in the foreground process group and acquires their
`ThreadGroupMutableState` locks. Previously, it was called while already
holding the `ThreadGroupMutableState` lock of the exiting session
leader. This caused a lock order violation.

To enforce the correct lock order, `disassociate_controlling_terminal`
must be called after dropping any `ThreadGroupMutableState` lock.

This change introduces a `#[must_use]` `SessionDisassociation` struct
returned by `leave_process_group` and `set_process_group`. Callers
(like `ThreadGroup::remove`, `setpgid`, and `setsid`) must explicitly
call `.disassociate_controlling_terminal()` on the returned value
after dropping the `ThreadGroupMutableState` lock, ensuring the fix
is safe and cannot be forgotten.

Original-Original-Fixed: b/529617819
Original-Original-Reviewed-on: https://fuchsia-review.googlesource.com/c/fuchsia/+/1689035
Original-Original-Revision: d09e36598357f3d802f4254da0137ebe22596415
GitOrigin-RevId: 54fef17c92bcd7cd8577f89dee1e7acab236078a
Change-Id: I2b619c949a4d03c4be98a9b9458b56ce84d2a548
Reviewed-on: https://fuchsia-review.googlesource.com/c/integration/+/1692021
Cr-Commit-Position: refs/heads/main@{#196091}
1 file changed
tree: ca1d01451b1322d36b3a227dcb3c3d2dad0d80ec
  1. ctf/
  2. git-hooks/
  3. infra/
  4. third_party/
  5. cobalt
  6. flower
  7. jiri.lock
  8. MILESTONE
  9. minimal
  10. prebuilts
  11. README.md
  12. stem
  13. test_durations
README.md

Integration

This repository contains Fuchsia's Global Integration manifest files.

Making changes

All changes should be made to the internal version of this repository. Our infrastructure automatically updates this version when the internal one changes.

Currently all changes must be made by a Google employee. Non-Google employees wishing to make a change can ask for assistance in one of the communication channels documented at get involved.

Obtaining the source

First install Jiri.

Next run:

$ jiri init
$ jiri import minimal https://fuchsia.googlesource.com/integration
$ jiri update

Third party

Third party projects should have their own subdirectory in ./third_party.