1
Fork 0
mirror of https://git.savannah.gnu.org/git/guile.git synced 2025-04-30 11:50:28 +02:00

Fix returning partially allocated blocks that are actually full

This commit is contained in:
Andy Wingo 2024-07-12 09:06:26 +02:00
parent 64c7d73fa2
commit 9167dbb5f6

View file

@ -231,9 +231,15 @@ static struct pcc_block* pop_partially_allocated_block(struct pcc_space *space)
static void push_partially_allocated_block(struct pcc_space *space, static void push_partially_allocated_block(struct pcc_space *space,
struct pcc_block *block, struct pcc_block *block,
uintptr_t hp) { uintptr_t hp) {
block->allocated = hp & (REGION_SIZE - 1); size_t allocated = hp & (REGION_SIZE - 1);
GC_ASSERT(block->allocated); if (allocated) {
push_block(&space->partially_allocated, block); block->allocated = allocated;
push_block(&space->partially_allocated, block);
} else {
// Could be hp was bumped all the way to the limit, in which case
// allocated wraps to 0; in any case the block is full.
push_allocated_block(space, block);
}
} }
static struct pcc_block* pop_paged_out_block(struct pcc_space *space) { static struct pcc_block* pop_paged_out_block(struct pcc_space *space) {