diff options
author | Ben Gamari <ben@smart-cactus.org> | 2023-04-27 07:45:13 -0400 |
---|---|---|
committer | Marge Bot <ben+marge-bot@smart-cactus.org> | 2023-05-09 18:41:14 -0400 |
commit | b2cdb7dacc095142e29c0f28a956b7fa97cdb4b1 (patch) | |
tree | 30aab423cf7ec7adde72437e850e94a3e9248ac6 | |
parent | 6738c01d6175c5701e5c53e2ae6716d1103f7355 (diff) | |
download | haskell-b2cdb7dacc095142e29c0f28a956b7fa97cdb4b1.tar.gz |
nonmoving: Account for mutator allocations in bytes_allocated
Previously we failed to account direct mutator allocations into the
nonmoving heap against the mutator's allocation limit and
`cap->total_allocated`. This only manifests during CAF evaluation (since
we allocate the CAF's blackhole directly into the nonmoving heap).
Fixes #23312.
-rw-r--r-- | rts/sm/NonMovingAllocate.c | 4 | ||||
-rw-r--r-- | rts/sm/Storage.c | 2 | ||||
-rw-r--r-- | rts/sm/Storage.h | 2 |
3 files changed, 7 insertions, 1 deletions
diff --git a/rts/sm/NonMovingAllocate.c b/rts/sm/NonMovingAllocate.c index c826a0ff3a..f6d2621f23 100644 --- a/rts/sm/NonMovingAllocate.c +++ b/rts/sm/NonMovingAllocate.c @@ -253,5 +253,9 @@ void *nonmovingAllocateGC(Capability *cap, StgWord sz) GNUC_ATTR_HOT void *nonmovingAllocate(Capability *cap, StgWord sz) { + // Handle "bytes allocated" accounting in the same way we + // do in Storage.c:allocate. See #23312. + accountAllocation(cap, sz); + cap->total_allocated += sz; return nonmovingAllocate_(SM_LOCK, cap, sz); } diff --git a/rts/sm/Storage.c b/rts/sm/Storage.c index 6d6500df9a..ec2f446a3f 100644 --- a/rts/sm/Storage.c +++ b/rts/sm/Storage.c @@ -966,7 +966,7 @@ move_STACK (StgStack *src, StgStack *dest) dest->sp = (StgPtr)dest->sp + diff; } -STATIC_INLINE void +void accountAllocation(Capability *cap, W_ n) { TICK_ALLOC_HEAP_NOCTR(WDS(n)); diff --git a/rts/sm/Storage.h b/rts/sm/Storage.h index 42c56fe164..a0d9af8de6 100644 --- a/rts/sm/Storage.h +++ b/rts/sm/Storage.h @@ -125,6 +125,8 @@ StgWord genLiveBlocks (generation *gen); StgWord calcTotalLargeObjectsW (void); StgWord calcTotalCompactW (void); +void accountAllocation(Capability *cap, W_ n); + /* ---------------------------------------------------------------------------- Storage manager internal APIs and globals ------------------------------------------------------------------------- */ |