[project @ 2001-03-02 16:15:53 by simonmar]
authorsimonmar <unknown>
Fri, 2 Mar 2001 16:15:53 +0000 (16:15 +0000)
committersimonmar <unknown>
Fri, 2 Mar 2001 16:15:53 +0000 (16:15 +0000)
commit435b10867ae4f4a379137e632961c55612c258e3
tree71ebe6f296e6645a2bae2160d93f74d1dacc91dd
parentb126c85fc7c445550f122e1f80b8059a6efd528f
[project @ 2001-03-02 16:15:53 by simonmar]
ASSERT in updateWithIndirection() that we haven't already updated this
object with an indirection, and fix two places in the RTS where this
could happen.

The problem only occurs when we're in a black-hole-style loop, and
there are multiple update frames on the stack pointing to the same
object (this is possible because of lazy black-holing).  Both stack
squeezing and asynchronous exception raising walk down the stack and
remove update frames, updating their contents with indirections.  If
we don't protect against multiple updates, the mutable list in the old
generation may get into a bogus state.
ghc/rts/GC.c
ghc/rts/Schedule.c
ghc/rts/Storage.h