<div dir="ltr">Whoops, quite right, and ThreadPaused.c (<a href="https://ghc.haskell.org/trac/ghc/browser/ghc/rts/ThreadPaused.c">https://ghc.haskell.org/trac/ghc/browser/ghc/rts/ThreadPaused.c</a>) makes clear that there's only one Blackhole tag.</div><div class="gmail_extra"><br><div class="gmail_quote">On Wed, Sep 16, 2015 at 1:37 PM, Kei Davis <span dir="ltr"><<a href="mailto:kei@lanl.gov" target="_blank">kei@lanl.gov</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Jan,<br>
<br>
I suppose things could have changed since 2005, but taking "Haskell on a Shared-Memory Multiprocessor" (Harris, Marlow, Peyton Jones 2005) as the reference point, the figure in section 3.3 makes clear that a thunk's payload (free variables) remains valid until update with an indirection.<br>
<br>
The paper is also clear that there is only one header word, i.e., that a copy of the original header word isn't stashed in the header and that this header word is replaced with a blackhole (code pointer or info pointer).  They do not state outright that such a copy isn't stashed in the payload together with the free variables, but if that were the case it would seem an odd omission given the level of detail otherwise.<span class="HOEnZb"><font color="#888888"><br>
<br>
Kei</font></span><div class="HOEnZb"><div class="h5"><br>
<br>
On 09/16/2015 10:48 AM, Jan-Willem Maessen wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
I *believe* the answer is "Black holing happens as / after the thunk<br>
contents are copied to the stack, so the contents of the thunk are now<br>
dead and the data is live on a stack somewhere."<br>
<br>
-Jan<br>
</blockquote>
<br></div></div><div class="HOEnZb"><div class="h5">
-- <br>
Kei Davis<br>
Applied Computer Science Group CCS-7, Mail Stop B287<br>
Los Alamos National Laboratory<br>
Los Alamos, NM 87545, U.S.A.<br>
</div></div></blockquote></div><br></div>