Skip to content

Commit 5b67cc6

Browse files
pks-tgitster
authored andcommitted
reftable/stack: handle allocation failures in auto compaction
Handle allocation failures in `reftable_stack_auto_compact()`. Signed-off-by: Patrick Steinhardt <[email protected]> Signed-off-by: Junio C Hamano <[email protected]>
1 parent 694af03 commit 5b67cc6

File tree

1 file changed

+12
-4
lines changed

1 file changed

+12
-4
lines changed

reftable/stack.c

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1518,6 +1518,8 @@ static uint64_t *stack_table_sizes_for_compaction(struct reftable_stack *st)
15181518
uint64_t *sizes;
15191519

15201520
REFTABLE_CALLOC_ARRAY(sizes, st->merged->readers_len);
1521+
if (!sizes)
1522+
return NULL;
15211523

15221524
for (size_t i = 0; i < st->merged->readers_len; i++)
15231525
sizes[i] = st->readers[i]->size - overhead;
@@ -1527,11 +1529,17 @@ static uint64_t *stack_table_sizes_for_compaction(struct reftable_stack *st)
15271529

15281530
int reftable_stack_auto_compact(struct reftable_stack *st)
15291531
{
1530-
uint64_t *sizes = stack_table_sizes_for_compaction(st);
1531-
struct segment seg =
1532-
suggest_compaction_segment(sizes, st->merged->readers_len,
1533-
st->opts.auto_compaction_factor);
1532+
struct segment seg;
1533+
uint64_t *sizes;
1534+
1535+
sizes = stack_table_sizes_for_compaction(st);
1536+
if (!sizes)
1537+
return REFTABLE_OUT_OF_MEMORY_ERROR;
1538+
1539+
seg = suggest_compaction_segment(sizes, st->merged->readers_len,
1540+
st->opts.auto_compaction_factor);
15341541
reftable_free(sizes);
1542+
15351543
if (segment_size(&seg) > 0)
15361544
return stack_compact_range(st, seg.start, seg.end - 1,
15371545
NULL, STACK_COMPACT_RANGE_BEST_EFFORT);

0 commit comments

Comments
 (0)