From 5c556cafe1fef5e4ad6c2cc63c397a026022b7f1 Mon Sep 17 00:00:00 2001 From: simonmar 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 5fe52d0..32f9fcd 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. -- 1.7.10.4