NonMoving: More comments
authorBen Gamari <ben@smart-cactus.org>
Sun, 19 May 2019 18:09:16 +0000 (14:09 -0400)
committerBen Gamari <ben@smart-cactus.org>
Wed, 19 Jun 2019 01:43:06 +0000 (21:43 -0400)
rts/sm/NonMovingMark.c

index e6e34fe..107b3ad 100644 (file)
@@ -120,6 +120,9 @@ StgIndStatic *debug_caf_list_snapshot = (StgIndStatic*)END_OF_CAF_LIST;
  *
  *  - In the code generated by the STG code generator for pointer array writes
  *
+ *  - In thunk updates (e.g. updateWithIndirection) to ensure that the free
+ *    variables of the original thunk remain reachable.
+ *
  * There is also a read barrier to handle weak references, as described in
  * Note [Concurrent read barrier on deRefWeak#].
  *
@@ -519,6 +522,13 @@ inline void updateRemembSetPushThunk(Capability *cap, StgThunk *thunk)
     updateRemembSetPushThunkEager(cap, (StgThunkInfoTable *) info, thunk);
 }
 
+/* Push the free variables of a thunk to the update remembered set.
+ * This is called by the thunk update code (e.g. updateWithIndirection) before
+ * we update the indirectee to ensure that the thunk's free variables remain
+ * visible to the concurrent collector.
+ *
+ * See Note [Update rememembered set].
+ */
 void updateRemembSetPushThunkEager(Capability *cap,
                                    const StgThunkInfoTable *info,
                                    StgThunk *thunk)