Commit 7c0b595e authored by takano-akio's avatar takano-akio Committed by Ben Gamari

Fix comments about scavenging WEAK objects

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
parent 0c0129b6
......@@ -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>
......
......@@ -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)
......
......@@ -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) {
......
......@@ -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;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment