diff options
author | Ömer Sinan Ağacan <omeragacan@gmail.com> | 2019-02-22 10:44:27 +0300 |
---|---|---|
committer | Ben Gamari <ben@smart-cactus.org> | 2019-02-22 11:38:57 -0500 |
commit | 6698bbadb99695e97f0f07b36f57dd06193074ae (patch) | |
tree | 41f75effa2f1802a60cc8364d50d2bd4b46d8aba /rts/Messages.c | |
parent | a4f7fc5e8a3002f19b78d7982735a2d42dd744b1 (diff) | |
download | haskell-wip/nonmoving-gc.tar.gz |
Remove origin arguments from write barrier functionswip/nonmoving-gc
Write barriers push old values of updated field, e.g. when we have
*q = p;
we do
updateRemembSetPushClosure(*q, q);
*q = p;
Here the second argument ("origin") is not useful because by the time we
do the update we invalidate "origin" (`q` is no longer origin of old
`*q`).
In general it doesn't make sense to record origins in write barriers so
we remove all origin arguments from write barriers.
Fixes #170.
Diffstat (limited to 'rts/Messages.c')
-rw-r--r-- | rts/Messages.c | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/rts/Messages.c b/rts/Messages.c index 6a09cd898b..89415ea3d6 100644 --- a/rts/Messages.c +++ b/rts/Messages.c @@ -257,7 +257,7 @@ loop: // point to the BLOCKING_QUEUE from the BLACKHOLE write_barrier(); // make the BQ visible if (nonmoving_write_barrier_enabled) { - updateRemembSetPushClosure(cap, (StgClosure*)p, NULL); + updateRemembSetPushClosure(cap, (StgClosure*)p); } ((StgInd*)bh)->indirectee = (StgClosure *)bq; recordClosureMutated(cap,bh); // bh was mutated @@ -290,7 +290,7 @@ loop: if (nonmoving_write_barrier_enabled) { // We are about to overwrite bq->queue; make sure its current value // makes it into the update remembered set - updateRemembSetPushClosure(cap, (StgClosure*)bq->queue, NULL); + updateRemembSetPushClosure(cap, (StgClosure*)bq->queue); } msg->link = bq->queue; bq->queue = msg; |