]> git.ipfire.org Git - thirdparty/git.git/commitdiff
reftable/record: reuse message when decoding log records
authorPatrick Steinhardt <ps@pks.im>
Tue, 5 Mar 2024 12:11:12 +0000 (13:11 +0100)
committerJunio C Hamano <gitster@pobox.com>
Tue, 5 Mar 2024 17:10:06 +0000 (09:10 -0800)
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>
reftable/record.c
reftable/reftable-record.h

index 82780b2d06fa21a2b8ce764d8b46babcb37b156b..7c868775860082cb42fc1358b689c6fa7262e956 100644 (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;
 
index d28f38175cd4726d614280bb6af1d79e82273ff6..2a2943cd134cebf1e6b9713613ba228d49576281 100644 (file)
@@ -96,6 +96,7 @@ struct reftable_log_record {
                        uint64_t time;
                        int16_t tz_offset;
                        char *message;
+                       size_t message_cap;
                } update;
        } value;
 };