Merge branch 'ps/reftable-alloc-failures-zalloc-fix'
Recent reftable updates mistook a NULL return from a request for 0-byte allocation as OOM and died unnecessarily, which has been corrected. * ps/reftable-alloc-failures-zalloc-fix: reftable/basics: return NULL on zero-sized allocations reftable/stack: fix zero-sized allocation when there are no readers reftable/merged: fix zero-sized allocation when there are no readers reftable/stack: don't perform auto-compaction with less than two tables
This commit is contained in:
@ -270,9 +270,9 @@ static int reftable_stack_reload_once(struct reftable_stack *st,
|
||||
int reuse_open)
|
||||
{
|
||||
size_t cur_len = !st->merged ? 0 : st->merged->readers_len;
|
||||
struct reftable_reader **cur;
|
||||
struct reftable_reader **cur = NULL;
|
||||
struct reftable_reader **reused = NULL;
|
||||
struct reftable_reader **new_readers;
|
||||
struct reftable_reader **new_readers = NULL;
|
||||
size_t reused_len = 0, reused_alloc = 0, names_len;
|
||||
size_t new_readers_len = 0;
|
||||
struct reftable_merged_table *new_merged = NULL;
|
||||
@ -280,18 +280,22 @@ static int reftable_stack_reload_once(struct reftable_stack *st,
|
||||
int err = 0;
|
||||
size_t i;
|
||||
|
||||
cur = stack_copy_readers(st, cur_len);
|
||||
if (!cur) {
|
||||
err = REFTABLE_OUT_OF_MEMORY_ERROR;
|
||||
goto done;
|
||||
if (cur_len) {
|
||||
cur = stack_copy_readers(st, cur_len);
|
||||
if (!cur) {
|
||||
err = REFTABLE_OUT_OF_MEMORY_ERROR;
|
||||
goto done;
|
||||
}
|
||||
}
|
||||
|
||||
names_len = names_length(names);
|
||||
|
||||
new_readers = reftable_calloc(names_len, sizeof(*new_readers));
|
||||
if (!new_readers) {
|
||||
err = REFTABLE_OUT_OF_MEMORY_ERROR;
|
||||
goto done;
|
||||
if (names_len) {
|
||||
new_readers = reftable_calloc(names_len, sizeof(*new_readers));
|
||||
if (!new_readers) {
|
||||
err = REFTABLE_OUT_OF_MEMORY_ERROR;
|
||||
goto done;
|
||||
}
|
||||
}
|
||||
|
||||
while (*names) {
|
||||
@ -1627,6 +1631,9 @@ int reftable_stack_auto_compact(struct reftable_stack *st)
|
||||
struct segment seg;
|
||||
uint64_t *sizes;
|
||||
|
||||
if (st->merged->readers_len < 2)
|
||||
return 0;
|
||||
|
||||
sizes = stack_table_sizes_for_compaction(st);
|
||||
if (!sizes)
|
||||
return REFTABLE_OUT_OF_MEMORY_ERROR;
|
||||
|
Reference in New Issue
Block a user