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)
committerÖmer Sinan Ağacan <omeragacan@gmail.com>
Wed, 5 Dec 2018 16:47:44 +0000 (19:47 +0300)
commit5f1d949ab9e09b8d95319633854b7959df06eb58
tree9fc12518e255c003ea57d64a2da9413f941fdd9b
parent84cba4bce65ffc99e2356b3621cf91258b055cad
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
rts/RetainerProfile.c