summaryrefslogtreecommitdiff
path: root/compiler/utils/FastString.hs
diff options
context:
space:
mode:
authorMoritz Angermann <moritz.angermann@gmail.com>2016-12-11 11:32:28 +0000
committerTamar Christina <tamar@zhox.com>2016-12-11 15:29:17 +0000
commitc3c702441137dc8f7ee0dd5ac313be96d625459a (patch)
treea59633ac90b97a7df7c09db560bf8030c15ebf2e /compiler/utils/FastString.hs
parent490b9429a8ed3c55d17bf0964fb14582eb206a3d (diff)
downloadhaskell-c3c702441137dc8f7ee0dd5ac313be96d625459a.tar.gz
Make globals use sharedCAF
Summary: The use of globals is quite painful when multiple rts are loaded, e.g. when plugins are loaded, which bring in a second rts. The sharedCAF appraoch was employed for the FastStringTable; I've taken the libery to extend this to the other globals I could find. This is a reboot of D2575, that should hopefully not exhibit the same windows build issues. Reviewers: Phyx, simonmar, goldfire, bgamari, austin, hvr, erikd Reviewed By: Phyx, simonmar, bgamari Subscribers: mpickering, thomie Differential Revision: https://phabricator.haskell.org/D2773
Diffstat (limited to 'compiler/utils/FastString.hs')
-rw-r--r--compiler/utils/FastString.hs7
1 files changed, 0 insertions, 7 deletions
diff --git a/compiler/utils/FastString.hs b/compiler/utils/FastString.hs
index 1496a8686e..8f76584875 100644
--- a/compiler/utils/FastString.hs
+++ b/compiler/utils/FastString.hs
@@ -285,13 +285,6 @@ originally assigned to those FastStrings. Thus the lookup fails since the
domain of the GlobalRdrEnv is affected by the RdrName's OccName's FastString's
unique.
-The old `reinitializeGlobals` mechanism is enough to provide the plugin with
-read-access to the table, but it insufficient in the general case where the
-plugin may allocate FastStrings. This mutates the supply for the FastStrings'
-unique, and that needs to be propagated back to the compiler's instance of the
-global variable. Such propagation is beyond the `reinitializeGlobals`
-mechanism.
-
Maintaining synchronization of the two instances of this global is rather
difficult because of the uses of `unsafePerformIO` in this module. Not
synchronizing them risks breaking the rather major invariant that two