From 5c556cafe1fef5e4ad6c2cc63c397a026022b7f1 Mon Sep 17 00:00:00 2001
From: simonmar <unknown>
Date: Wed, 11 Jan 2006 11:29:49 +0000
Subject: [PATCH] [project @ 2006-01-11 11:29:49 by simonmar] add some more
 warnings about unsafeThaw

---
 Data/Array/Base.hs | 12 +++++++++---
 1 file changed, 9 insertions(+), 3 deletions(-)

diff --git a/Data/Array/Base.hs b/Data/Array/Base.hs
index 5fe52d07..32f9fcdb 100644
--- a/Data/Array/Base.hs
+++ b/Data/Array/Base.hs
@@ -1673,14 +1673,20 @@ thawSTUArray (UArray l u arr) = do
 
    Note that because the array is possibly not copied, any subsequent
    modifications made to the mutable version of the array may be
-   shared with the immutable version.  It is safe to use, therefore, if
-   the immutable version is never referenced again.
+   shared with the immutable version.  It is only safe to use,
+   therefore, if the immutable array is never referenced again in this
+   thread, and there is no possibility that it can be also referenced
+   in another thread.  If you use an unsafeThaw/write/unsafeFreeze
+   sequence in a multi-threaded setting, then you must ensure that
+   this sequence is atomic with respect to other threads, or a garbage
+   collector crash may result (because the write may be writing to a
+   frozen array).
 
    The non-copying implementation is supported between certain pairs
    of array types only; one constraint is that the array types must
    have identical representations.  In GHC, The following pairs of
    array types have a non-copying O(1) implementation of
-   'unsafeFreeze'.  Because the optimised versions are enabled by
+   'unsafeThaw'.  Because the optimised versions are enabled by
    specialisations, you will need to compile with optimisation (-O) to
    get them.
 
-- 
GitLab