[coroutine] Don't reuse coroutines in CoroutineManager

Once coroutines have been resumed with ContinuationStatus::INTERRUPTED,
they cannot yield anymore (any attempt to Yield will DCHECK). The
coroutine manager was trying to reuse its coroutines as long as it is
not destructed, but coroutines can also be interrupted if they do a
SyncCall and the callback is dropped.
Instead of reusing coroutines, we rely on the coroutine service reusing
stacks. This leads to (temporarily) using one more stack: when one
pending task completes, we need to launch the next task in another
coroutine before returning from the current one.

Test: CoroutineManagerTest.MultipleCoroutinesInterrupted
Change-Id: I1abdb02de44565fe2570d937df1da6235b7393ad
2 files changed
tree: 6ff45a145d6e4d3ecd558318f83db3f8f5264f00
  1. boards/
  2. build/
  3. bundles/
  4. docs/
  5. examples/
  6. garnet/
  7. peridot/
  8. products/
  9. scripts/
  10. sdk/
  11. src/
  12. third_party/
  13. tools/
  14. zircon/
  15. .clang-format
  16. .clang-tidy
  17. .dir-locals.el
  18. .gitattributes
  19. .gitignore
  20. .gn
  21. .style.yapf
  22. AUTHORS
  23. BUILD.gn
  24. CODE_OF_CONDUCT.md
  25. CONTRIBUTING.md
  26. LICENSE
  27. OWNERS
  28. PATENTS
  29. README.md
  30. rustfmt.toml
README.md

Fuchsia

Pink + Purple == Fuchsia (a new operating system)

What is Fuchsia?

Fuchsia is a modular, capability-based operating system. Fuchsia runs on modern 64-bit Intel and ARM processors.

Fuchsia is an open source project with a code of conduct that we expect everyone who interacts with the project to respect.

How can I build and run Fuchsia?

See Getting Started.

Where can I learn more about Fuchsia?

See fuchsia.dev.