Rules for use of unsafeThaw...
jmaessen at alum.mit.edu
Thu Nov 3 12:08:09 EST 2005
I've recently been experimenting with unsafeFreeze/unsafeThaw in
GHC. Judicious use of these functions vastly reduces GC overhead in
Data.HashTable. However, a slightly mis-timed GC will cause the
whole mess to crash. I am attempting to understand the invariants
required to safely use unsafeFreeze/unsafeThaw.
I believe the following usage ought to be 100% safe:
1) Take the last and only reference to a mutable array, and call
unsafeFreeze to obtain an immutable array.
2) Take the last and only reference to an immutable array, and call
unsafeThaw to obtain a mutable array.
Are there any other usage modes which are GC-safe? In particular, is
it possible for a reference to the frozen array to exist somewhere on
the heap when a call to unsafeThaw occurs? Is there a particular set
of circumstances under which we might get away with this (eg, no
allocation during the interval where the ambiguous references occur)?
More information about the Glasgow-haskell-users