mirror of
https://github.com/git/git
synced 2024-11-05 18:59:29 +00:00
Revert "name-rev: release unused name strings"
This reverts commit2d53975488
.3656f84278
(name-rev: prefer shorter names over following merges, 2021-12-04) broke the assumption of2d53975488
(name-rev: release unused name strings, 2020-02-04) that a better name for a child is a better name for all of its ancestors as well, because it added a penalty for generation > 0. This leads to strings being free(3)'d that are still needed.079f970971
(name-rev: sort tip names before applying, 2020-02-05) already reduced the number of free(3) calls for the use case that motivated the original patch (name-rev --all in the Chromium repository) from ca. 44000 to 5, and3656f84278
eliminated even those few. So this revert won't affect name-rev's performance on that particular repo. Reported-by: Thomas Hurst <tom@hur.st> Helped-by: Elijah Newren <newren@gmail.com> Signed-off-by: René Scharfe <l.s.r@web.de> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
parent
3656f84278
commit
45a14f578e
1 changed files with 5 additions and 16 deletions
|
@ -17,7 +17,7 @@
|
|||
#define CUTOFF_DATE_SLOP 86400
|
||||
|
||||
struct rev_name {
|
||||
char *tip_name;
|
||||
const char *tip_name;
|
||||
timestamp_t taggerdate;
|
||||
int generation;
|
||||
int distance;
|
||||
|
@ -34,7 +34,7 @@ static struct commit_rev_name rev_names;
|
|||
|
||||
static int is_valid_rev_name(const struct rev_name *name)
|
||||
{
|
||||
return name && (name->generation || name->tip_name);
|
||||
return name && name->tip_name;
|
||||
}
|
||||
|
||||
static struct rev_name *get_commit_rev_name(const struct commit *commit)
|
||||
|
@ -96,20 +96,9 @@ static struct rev_name *create_or_update_name(struct commit *commit,
|
|||
{
|
||||
struct rev_name *name = commit_rev_name_at(&rev_names, commit);
|
||||
|
||||
if (is_valid_rev_name(name)) {
|
||||
if (!is_better_name(name, taggerdate, generation, distance, from_tag))
|
||||
return NULL;
|
||||
|
||||
/*
|
||||
* This string might still be shared with ancestors
|
||||
* (generation > 0). We can release it here regardless,
|
||||
* because the new name that has just won will be better
|
||||
* for them as well, so name_rev() will replace these
|
||||
* stale pointers when it processes the parents.
|
||||
*/
|
||||
if (!name->generation)
|
||||
free(name->tip_name);
|
||||
}
|
||||
if (is_valid_rev_name(name) &&
|
||||
!is_better_name(name, taggerdate, generation, distance, from_tag))
|
||||
return NULL;
|
||||
|
||||
name->taggerdate = taggerdate;
|
||||
name->generation = generation;
|
||||
|
|
Loading…
Reference in a new issue