Skip to content

Commit a418a7a

Browse files
pks-tgitster
authored andcommitted
reftable/record: don't try to reallocate ref record name
When decoding reftable ref records we first release the pointer to the record passed to us and then use realloc(3P) to allocate the refname array. This is a bit misleading though as we know at that point that the refname will always be `NULL`, so we would always end up allocating a new char array anyway. Refactor the code to use `REFTABLE_ALLOC_ARRAY()` instead. As the following benchmark demonstrates this is a tiny bit more efficient. But the bigger selling point really is the gained clarity. Benchmark 1: show-ref: single matching ref (revision = HEAD~) Time (mean ± σ): 150.1 ms ± 4.1 ms [User: 146.6 ms, System: 3.3 ms] Range (min … max): 144.5 ms … 180.5 ms 1000 runs Benchmark 2: show-ref: single matching ref (revision = HEAD) Time (mean ± σ): 148.9 ms ± 4.5 ms [User: 145.2 ms, System: 3.4 ms] Range (min … max): 143.0 ms … 185.4 ms 1000 runs Summary show-ref: single matching ref (revision = HEAD) ran 1.01 ± 0.04 times faster than show-ref: single matching ref (revision = HEAD~) Ideally, we should try and reuse the memory of the old record instead of first freeing and then immediately reallocating it. This requires some more surgery though and is thus left for a future iteration. Signed-off-by: Patrick Steinhardt <[email protected]> Signed-off-by: Junio C Hamano <[email protected]>
1 parent 92fa325 commit a418a7a

File tree

1 file changed

+3
-2
lines changed

1 file changed

+3
-2
lines changed

reftable/record.c

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -377,10 +377,11 @@ static int reftable_ref_record_decode(void *rec, struct strbuf key,
377377

378378
assert(hash_size > 0);
379379

380-
r->refname = reftable_realloc(r->refname, key.len + 1);
380+
r->refname = reftable_malloc(key.len + 1);
381381
memcpy(r->refname, key.buf, key.len);
382-
r->update_index = update_index;
383382
r->refname[key.len] = 0;
383+
384+
r->update_index = update_index;
384385
r->value_type = val_type;
385386
switch (val_type) {
386387
case REFTABLE_REF_VAL1:

0 commit comments

Comments
 (0)