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:

committed by
Junio C Hamano

parent
193fcb3ff8
commit
e0bd13beea
@ -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;
|
||||
|
||||
|
Reference in New Issue
Block a user