stackrefleak.nim 543 B

12345678910111213141516171819202122232425262728293031323334
  1. discard """
  2. outputsub: "no leak: "
  3. retries: 2
  4. """
  5. type
  6. Cyclic = object
  7. sibling: PCyclic
  8. data: array[0..200, char]
  9. PCyclic = ref Cyclic
  10. proc makePair: PCyclic =
  11. new(result)
  12. new(result.sibling)
  13. when not defined(gcDestructors):
  14. result.sibling.sibling = result
  15. proc loop =
  16. for i in 0..10000:
  17. var x = makePair()
  18. GC_fullCollect()
  19. x = nil
  20. GC_fullCollect()
  21. if getOccupiedMem() > 300_000:
  22. echo "still a leak! ", getOccupiedMem()
  23. quit(1)
  24. else:
  25. echo "no leak: ", getOccupiedMem()
  26. loop()