Stop the linker panic
authorMoritz Angermann <moritz.angermann@gmail.com>
Mon, 6 Aug 2018 16:46:26 +0000 (12:46 -0400)
committerBen Gamari <ben@smart-cactus.org>
Mon, 6 Aug 2018 21:53:14 +0000 (17:53 -0400)
commit4fc6524a2a4a0003495a96c8b84783286f65c198
tree92e4bd27ad4b4133782f0f34cb5f7a918ba11e1c
parent36a4c19494e2cb7e968f1d0e0c09926a660e1a56
Stop the linker panic

If we fail to initialize the liker properly, we still set the
`initLinkerDone`. In fact we even set that prior to actually
initializing the linker. However if the linker initialization fails, we
the `Done` state is still true. As such we run into the `Dynamic Linker
not initialised` error. Which while technically corret is confusing as
it pulls the attation away from the real issue.

This change puts the Done state into an MVar, and as such ensureing
that all parallel access needs to wait for the linker to be actually
initialized, or try to re-initilize if it fails.

Reviewers: bgamari, RyanGlScott, simonmar, hvr

Reviewed By: bgamari

Subscribers: rwbarton, thomie, carter

GHC Trac Issues: #9868, #10355, #13137, #13607, #13531

Differential Revision: https://phabricator.haskell.org/D5012
compiler/ghci/Linker.hs
compiler/utils/Panic.hs