gc-cycle-result.phpt 735 B

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. --TEST--
  2. GC can cleanup cycle when fiber result references fiber
  3. --FILE--
  4. <?php
  5. $fiber = null;
  6. $fiber = new Fiber(function () use (&$fiber) {
  7. return new class($fiber) {
  8. private $fiber;
  9. public function __construct($fiber) {
  10. $this->fiber = $fiber;
  11. }
  12. public function __destruct() {
  13. var_dump('DTOR');
  14. }
  15. };
  16. });
  17. $fiber->start();
  18. var_dump('COLLECT CYCLES');
  19. gc_collect_cycles();
  20. var_dump('DONE');
  21. var_dump($fiber->isTerminated());
  22. unset($fiber);
  23. var_dump('COLLECT CYCLES');
  24. gc_collect_cycles();
  25. var_dump('DONE');
  26. ?>
  27. --EXPECT--
  28. string(14) "COLLECT CYCLES"
  29. string(4) "DONE"
  30. bool(true)
  31. string(14) "COLLECT CYCLES"
  32. string(4) "DTOR"
  33. string(4) "DONE"