Admin message

Due to a large amount of spam we do not allow new users to create repositories, they are "external" users. If you are a new user and want to create a repository, for example for forking GHC, open a new issue on ghc/ghc using the "get-verified" issue template

Soundness of thunk update?
I am beginning to have second thoughts on whether the thunk update protocol we currently use (see `Note [Heap memory barriers]` in `SMP.h`) is safe on weakly ordered platforms. The problem is that lazy blackholing may mean that multiple threads race to update a thunk, resulting in a value being exposed via an indirection before being made available to other cores. Specifically, I am worried about interleavings like the following (where `t` is a thunk being updated and `a` and `b` are two evaluation results): ``` Thread A Thread B Thread C --------- --------- --------- t.indirectee=a t.indirectee=b release fence t.info=BLACKHOLE read t.info inspect t.indirectee release fence t.info=BLACKHOLE ``` Specifically, we see here that Thread A writes its result, `a` to the indirectee. Typically, the soundness of the update of the `indirectee` field is guaranteed by the release ordering of the `t.info=BLACKHOLE` store, guaranteeing that `a` is visible to readers when the closure becomes a blackhole. However, in this case Thread B races to update `indirectee`, storing its own result `b`. Meanwhile, thread `C` enters `t` (which is now a blackhole), inspects `t.indirectee`, and is therefore exposed to `b` before Thread B has guaranteed that it is visible. This seems like an extrodinarily narrow race, but AFAICT it's a race nevertheless.
issue