Remove explicit recursion in retainer profiling (fixes #14758)
authorAlexander Vershilov <alexander.vershilov@gmail.com>
Wed, 5 Dec 2018 16:47:32 +0000 (19:47 +0300)
committerBen Gamari <ben@smart-cactus.org>
Thu, 6 Dec 2018 17:41:22 +0000 (12:41 -0500)
commit6db7d11eed70b4db7b7698a9dfae94a6abae248a
tree6620fd9cebf587d08c3fa61e45037a7a2338376e
parent2594ea25641e4b27327449d40c5dd2d46d837af1
Remove explicit recursion in retainer profiling (fixes #14758)

Retainer profiling contained a recursion that under
certain circumstances could lead to the stack overflow
in C code.

The idea of the improvement is to keep an explicit stack for the
object, more precise to reuse existing stack, but allow new type of
objects to be stored there.

There is no reliable reproducer that is not a big program
but in some cases foldr (+) 0 [1..10000000] can work.

Reviewers: bgamari, simonmar, erikd, osa1

Reviewed By: bgamari, osa1

Subscribers: osa1, rwbarton, carter

GHC Trac Issues: #14758

Differential Revision: https://phabricator.haskell.org/D5351

(cherry picked from commit 5f1d949ab9e09b8d95319633854b7959df06eb58)
rts/RetainerProfile.c