diff --git a/ghc/docs/libraries/Weak.sgml b/ghc/docs/libraries/Weak.sgml index bc88b042bfd3f6b7a57f32c977fd94e79c545a9e..0f223f42f36ac4d79bcb1d11733318f2b779f6da 100644 --- a/ghc/docs/libraries/Weak.sgml +++ b/ghc/docs/libraries/Weak.sgml @@ -215,6 +215,7 @@ follows A heap object is reachable if: <itemize> +<item> It is a member of the <em/root set/. <item> It is directly pointed to by a reachable object, other than a weak pointer object. <item> It is a weak pointer object whose key is reachable. @@ -222,6 +223,14 @@ a weak pointer object. reachable. </itemize> +The root set consists of all runnable threads, and all stable pointers +(see Section <ref id="sec:stable-pointers" name="Stable Pointers">). +NOTE: currently all top-level objects are considered to be reachable, +although we hope to remove this restriction in the future. A +<tt/Char/ or small <tt/Int/ will also be constantly reachable, since +the garbage collector replaces heap-resident <tt/Char/s and small +<tt/Int/s with pointers to static copies. + Notice that a pointer to the key from its associated value or finaliser does not make the key reachable. However, if the key is reachable some other way, then the value