[roll] Roll fuchsia [fdio] Fix fd leak, remove gotos in spawn.cc

The use of gotos in spawn.cc forces one to define their
variables (including clients) at the beginning of a function,
which makes the code harder to follow. In shaving a yak from stabilizing
the LLCPP fidl::WireSyncClient API I've found it easier to refactor the
spawn.cc code to git rid of the goto usage.

To do this, we introduce two RAII types that wrap the spawn actions:

- SpawnActions: a RAII type that lets you look at each individual action
(used to calculate handle and name capacity).
- SpawnActions::ConsumingIterator: a RAII type that lets you consume the
resources in each action (used to convert the spawn actions into FIDL
data structures to make calls to Launcher).

It turns out that we are not closing file descriptors in some failure
cases (see [1]). This was fixed using the RAII types which free
resources consistently, and a test was added.

[1]: https://cs.opensource.google/fuchsia/fuchsia/+/c4984c67244e4008ecc32ca8dfb765294c7de06c:sdk/lib/fdio/spawn.cc;l=911

Test: fx test -v //sdk/lib/fdio/tests //sdk/cts/tests/pkg/fdio

Original-Reviewed-on: https://fuchsia-review.googlesource.com/c/fuchsia/+/595395
Original-Revision: 2f327576c905b86661d406334395f54f7e860b32
GitOrigin-RevId: 9c0a54e1413feff0b5fedfcdac2fa08a6da7f08c
Change-Id: Ieaab226f251895b310712c39a3907d5dd88aaf3d
1 file changed
tree: ca110cdd5ed542c114dd2d2860acbeddc417844d
  1. infra/
  2. third_party/
  3. firmware
  4. flower
  5. jiri.lock
  6. minimal
  7. prebuilts
  8. README.md
  9. stem
  10. 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 via the IRC channel #fuchsia on Freenode.

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.