]> git.ipfire.org Git - thirdparty/git.git/commit
negotiator/skipping: fix some problems in mark_common()
authorHan Xin <hanxin.hx@bytedance.com>
Wed, 26 Apr 2023 13:15:04 +0000 (21:15 +0800)
committerJunio C Hamano <gitster@pobox.com>
Wed, 26 Apr 2023 17:38:57 +0000 (10:38 -0700)
commit10e8a52ef11bbf260f0cb672d9b02b3cd9c780ca
tree3b2551da97d150145bd3c8383b5c5b4b0548d7ab
parent8e21ff5edb305bcfc12fc782f1c92542c427b624
negotiator/skipping: fix some problems in mark_common()

The mark_common() method in negotiator/skipping.c was converted
from recursive to iterative in 4654134976f (negotiator/skipping:
avoid stack overflow, 2022-10-25), but there is some more work
to do:

1. prio_queue() should be used with clear_prio_queue(), otherwise there
   will be a memory leak.
2. It does not do duplicate protection before prio_queue_put().
   (The COMMON bit would work here, too.)
3. When it translated from recursive to iterative it kept "return"
   statements that should probably be "continue" statements.
4. It does not attempt to parse commits, and instead returns
   immediately when finding an unparsed commit. This is something
   that it did in its original version, so maybe it is by design,
   but it doesn't match the doc comment for the method.

Helped-by: Derrick Stolee <derrickstolee@github.com>
Signed-off-by: Han Xin <hanxin.hx@bytedance.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
negotiator/skipping.c