[roll] Roll fuchsia [netstack3] Use wait groups for task joining

In If00931a3d2bd24a646cd83080650288c285f7fb9 we removed all detaching
tasks and placed their handles in FuturesUnordered. That significantly
regressed the per-socket memory usage of the stack unnecessarily.

All we need is to guarantee that all flows make sure the tasks they
spawned have finished so we can have a clean shutdown in tests and
ensure we have full control over when the final Ctx clone is dropped.

Fix by introducing TaskWaitGroupSpawner and TaskWaitGroup. These
effectively spawn and detach fuchsia_async::Tasks, but keep track of the
number of spawned tasks to join on when the work is finished. The
marginal per-socket cost should be much lower now.

Also return the wait group from the socket provider tasks, so the task
itself can be deallocated but we can still block a teardown on having
all the sockets cleaned up.

SocketWorker now provides scoped spawners, so accepted sockets that
start in the connected state end up in the correct WaitGroup for correct
shutdown behavior.

Original-Fixed: 132649
Original-Bug: 132920
Original-Reviewed-on: https://fuchsia-review.googlesource.com/c/fuchsia/+/909498
Original-Revision: 1a0069948fa8520f0199a56d1057fdcebf5cba24
GitOrigin-RevId: ec1fcd1e6c0fd6590d602b4e9c9f6b0239dea946
Change-Id: Id38d47a0c0bad90e46b10f363c0bd63b6ea28751
1 file changed
tree: acf15634ea239a19839100efa6bc796698ea560c
  1. git-hooks/
  2. infra/
  3. third_party/
  4. cts
  5. firmware
  6. flower
  7. jiri.lock
  8. MILESTONE
  9. minimal
  10. prebuilts
  11. README.md
  12. stem
  13. test_durations
  14. toolchain
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.