bug77345_gc_2.phpt 943 B

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. --TEST--
  2. Bug #77345 (Segmentation faults stack overflow in cyclic garbage collector) (Bug #77427)
  3. --INI--
  4. zend.enable_gc = 1
  5. --FILE--
  6. <?php
  7. class Node
  8. {
  9. /** @var Node */
  10. public $previous;
  11. /** @var Node */
  12. public $next;
  13. }
  14. var_dump(gc_enabled());
  15. var_dump('start');
  16. function xxx() {
  17. $firstNode = new Node();
  18. $firstNode->previous = $firstNode;
  19. $firstNode->next = $firstNode;
  20. $circularDoublyLinkedList = $firstNode;
  21. for ($i = 0; $i < 300000; $i++) {
  22. $currentNode = $circularDoublyLinkedList;
  23. $nextNode = $circularDoublyLinkedList->next;
  24. $newNode = new Node();
  25. $newNode->previous = $currentNode;
  26. $currentNode->next = $newNode;
  27. $newNode->next = $nextNode;
  28. $nextNode->previous = $newNode;
  29. $circularDoublyLinkedList = $nextNode;
  30. }
  31. }
  32. xxx();
  33. gc_collect_cycles();
  34. var_dump('end');
  35. ?>
  36. --EXPECT--
  37. bool(true)
  38. string(5) "start"
  39. string(3) "end"