unfinished-fiber-with-suspend-in-finally.phpt 668 B

123456789101112131415161718192021222324252627282930313233343536
  1. --TEST--
  2. Test unfinished fiber with suspend in finally
  3. --FILE--
  4. <?php
  5. $fiber = new Fiber(function (): object {
  6. try {
  7. try {
  8. echo "fiber\n";
  9. return new \stdClass;
  10. } finally {
  11. echo "inner finally\n";
  12. Fiber::suspend();
  13. echo "after await\n";
  14. }
  15. } catch (Throwable $exception) {
  16. echo "exit exception caught!\n";
  17. } finally {
  18. echo "outer finally\n";
  19. }
  20. echo "end of fiber should not be reached\n";
  21. });
  22. $fiber->start();
  23. unset($fiber); // Destroy fiber object, executing finally block.
  24. echo "done\n";
  25. ?>
  26. --EXPECT--
  27. fiber
  28. inner finally
  29. outer finally
  30. done