1
0
mirror of https://github.com/git/git synced 2024-06-30 22:54:27 +00:00

reftable/record: reuse message when decoding log records

Same as the preceding commit we can allocate log messages as needed when
decoding log records, thus further reducing the number of allocations.
Before:

    HEAP SUMMARY:
        in use at exit: 13,473 bytes in 122 blocks
      total heap usage: 3,068,488 allocs, 3,068,366 frees, 307,122,961 bytes allocated

After:

    HEAP SUMMARY:
        in use at exit: 13,473 bytes in 122 blocks
      total heap usage: 2,068,487 allocs, 2,068,365 frees, 305,122,946 bytes allocated

Signed-off-by: Patrick Steinhardt <ps@pks.im>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Patrick Steinhardt 2024-03-05 13:11:12 +01:00 committed by Junio C Hamano
parent 193fcb3ff8
commit e0bd13beea
2 changed files with 4 additions and 2 deletions

View File

@ -871,6 +871,7 @@ static int reftable_log_record_decode(void *rec, struct strbuf key,
switch (r->value_type) {
case REFTABLE_LOG_UPDATE:
FREE_AND_NULL(r->value.update.message);
r->value.update.message_cap = 0;
FREE_AND_NULL(r->value.update.email);
FREE_AND_NULL(r->value.update.name);
break;
@ -943,8 +944,8 @@ static int reftable_log_record_decode(void *rec, struct strbuf key,
goto done;
string_view_consume(&in, n);
r->value.update.message =
reftable_realloc(r->value.update.message, dest.len + 1);
REFTABLE_ALLOC_GROW(r->value.update.message, dest.len + 1,
r->value.update.message_cap);
memcpy(r->value.update.message, dest.buf, dest.len);
r->value.update.message[dest.len] = 0;

View File

@ -96,6 +96,7 @@ struct reftable_log_record {
uint64_t time;
int16_t tz_offset;
char *message;
size_t message_cap;
} update;
} value;
};