Fix comments about scavenging WEAK objects
authorTakano Akio <tak@anoak.io>
Thu, 12 May 2016 13:45:44 +0000 (15:45 +0200)
committerBen Gamari <ben@smart-cactus.org>
Thu, 12 May 2016 15:33:39 +0000 (17:33 +0200)
This is a follow-up of D2189. If fixes some comments, deletes a section
in the User's Guide about the bug, and updates .mailmap as suggested on
the WorkinConventions wiki page.

Test Plan: It compiles.

Reviewers: austin, simonmar, bgamari

Reviewed By: bgamari

Subscribers: thomie

Differential Revision: https://phabricator.haskell.org/D2202

GHC Trac Issues: #11108

.mailmap
docs/users_guide/bugs.rst
rts/sm/MarkWeak.c
rts/sm/Scav.c

index 5ea062b..81dec3d 100644 (file)
--- a/.mailmap
+++ b/.mailmap
@@ -242,6 +242,7 @@ Sven Panne              <sven.panne@aedion.de>              panne <unknown>
 Sven Panne              <sven.panne@aedion.de>              sven.panne@aedion.de <unknown>
 Sylvain Henry           <hsyl20@gmail.com>
 S├ębastien Carlier       <sebc@posse42.net>                  sebc <unknown>
+Takano Akio             <tak@anoak.io>                      <aljee@hyper.cx>
 Thorkil Naur            <naur@post11.tele.dk>               naur@post11.tele.dk <unknown>
 Tibor Erdesz            <erdeszt@gmail.com>
 Tim Chevalier           <chevalier@alum.wellesley.edu>
index c4ac9ce..ff83725 100644 (file)
@@ -486,11 +486,6 @@ Bugs in GHC
      data A :: Type where
        B :: forall (a :: A). A
 
--  There is known to be maleficent interactions between weak references and
-   laziness. Particularly, it has been observed that placing a thunk containing
-   a reference to a weak reference inside of another weak reference may cause
-   runtime crashes. See :ghc-ticket:`11108` for details.
-
 .. _bugs-ghci:
 
 Bugs in GHCi (the interactive GHC)
index 2393536..7e3e1d5 100644 (file)
@@ -269,13 +269,7 @@ static rtsBool tidyWeakList(generation *gen)
                 gct->evac_gen_no = new_gen->no;
                 gct->failed_to_evac = rtsFalse;
 
-                // evacuate the value and finalizer
-                //
-                // This WEAK object will not be considered by tidyWeakList
-                // during this collection because it is in a generation >= N,
-                // but it is on the mutable list so we must evacuate all of its
-                // pointers because some of them may point into a younger
-                // generation.
+                // evacuate the fields of the weak ptr
                 scavengeLiveWeak(w);
 
                 if (gct->failed_to_evac) {
index b046f39..7a799d6 100644 (file)
@@ -1300,6 +1300,10 @@ scavenge_one(StgPtr p)
     }
 
     case WEAK:
+        // This WEAK object will not be considered by tidyWeakList during this
+        // collection because it is in a generation >= N, but it is on the
+        // mutable list so we must evacuate all of its pointers because some
+        // of them may point into a younger generation.
         scavengeLiveWeak((StgWeak *)p);
         break;