[commit: ghc] wip/T16185: Fix checkPtrInArena (448f0e7)
git at git.haskell.org
git at git.haskell.org
Tue Jan 15 17:43:08 UTC 2019
Repository : ssh://git@git.haskell.org/ghc
On branch : wip/T16185
Link : http://ghc.haskell.org/trac/ghc/changeset/448f0e7dd78a8d9404f1aa5e8522cc284360c06d/ghc
>---------------------------------------------------------------
commit 448f0e7dd78a8d9404f1aa5e8522cc284360c06d
Author: Ömer Sinan Ağacan <omeragacan at gmail.com>
Date: Sat Jan 12 16:08:24 2019 +0300
Fix checkPtrInArena
(See comments)
>---------------------------------------------------------------
448f0e7dd78a8d9404f1aa5e8522cc284360c06d
rts/Arena.c | 13 +++++++++++--
1 file changed, 11 insertions(+), 2 deletions(-)
diff --git a/rts/Arena.c b/rts/Arena.c
index e0b4ebd..a4ff11b 100644
--- a/rts/Arena.c
+++ b/rts/Arena.c
@@ -121,8 +121,17 @@ arenaBlocks( void )
#if defined(DEBUG)
void checkPtrInArena( StgPtr p, Arena *arena )
{
- for (bdescr *bd = arena->current; bd; bd = bd->link) {
- if (p >= bd->start && p < bd->free) {
+ // We don't update free pointers of arena blocks, so we have to check cached
+ // free pointer for the first block.
+ if (p >= arena->current->start && p < arena->free) {
+ return;
+ }
+
+ // Rest of the blocks should be full (except there may be a little bit of
+ // slop at the end). Again, free pointers are not updated so we can't use
+ // those.
+ for (bdescr *bd = arena->current->link; bd; bd = bd->link) {
+ if (p >= bd->start && p < bd->start + (bd->blocks*BLOCK_SIZE_W)) {
return;
}
}
More information about the ghc-commits
mailing list