1. 12 Aug, 2022 1 commit
    • Xavier Thompson's avatar
      Rethink exception propagation from forks · e5e93a1d
      Xavier Thompson authored
      Previously, an exception thrown from a fork was rethrown:
      - a) when the call to fork() returns if the fork completes synchronously
      - b) otherwise, at the next explicit call to Sync() if there is one
      - c) otherwise, when the call to the enclosing Join coroutine returns
      
      In the case of infinite fork loops, this meant exceptions might never be
      propagated.
      
      Now, when an exception is thrown from a fork it's always rethrown when
      the call to the enclosing Join coroutine returns. The body of the Join
      coroutine just stops executing as soon as possible once a fork signals
      an exception. This will be at the call to fork() if the fork completes
      synchronously, or at any ensuing call to Sync() or fork() otherwise.
      
      Essentially once an exception is signaled from a parallel fork, the next
      call to fork() behaves like Sync() instead of creating a fork, and once
      all the parallel forks have completed, execution resumes directly at the
      call to the enclosing Join coroutine, where the exception is rethrown.
      e5e93a1d
  2. 09 Aug, 2022 5 commits
  3. 08 Aug, 2022 1 commit
  4. 20 Jul, 2022 3 commits
  5. 18 Jul, 2022 1 commit
  6. 12 Jul, 2022 1 commit
  7. 11 Jul, 2022 2 commits
  8. 08 Jul, 2022 2 commits
  9. 07 Jul, 2022 8 commits
  10. 28 Jun, 2022 1 commit
  11. 27 Jun, 2022 1 commit
  12. 21 Jun, 2022 1 commit
  13. 20 Jun, 2022 8 commits
  14. 19 Jun, 2022 1 commit
  15. 17 Jun, 2022 1 commit
  16. 16 Jun, 2022 3 commits