Permalink
Browse files

[project @ 2006-01-11 11:29:49 by simonmar]

add some more warnings about unsafeThaw
  • Loading branch information...
1 parent 4cb3138 commit 5c556cafe1fef5e4ad6c2cc63c397a026022b7f1 simonmar committed Jan 11, 2006
Showing with 9 additions and 3 deletions.
  1. +9 −3 Data/Array/Base.hs
View
@@ -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.

0 comments on commit 5c556ca

Please sign in to comment.