run-command.c: fix broken list iteration in clear_child_for_cleanup
Iterate through children_to_clean using 'next' fields but with an extra level of indirection. This allows us to update the chain when we remove a child and saves us managing several variables around the loop mechanism. Signed-off-by: David Gould <david@optimisefitness.com> Acked-by: Jeff King <peff@peff.net> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
parent
afe19ff7b5
commit
bdee397d7c
@ -49,13 +49,14 @@ static void mark_child_for_cleanup(pid_t pid)
|
||||
|
||||
static void clear_child_for_cleanup(pid_t pid)
|
||||
{
|
||||
struct child_to_clean **last, *p;
|
||||
struct child_to_clean **pp;
|
||||
|
||||
last = &children_to_clean;
|
||||
for (p = children_to_clean; p; p = p->next) {
|
||||
if (p->pid == pid) {
|
||||
*last = p->next;
|
||||
free(p);
|
||||
for (pp = &children_to_clean; *pp; pp = &(*pp)->next) {
|
||||
struct child_to_clean *clean_me = *pp;
|
||||
|
||||
if (clean_me->pid == pid) {
|
||||
*pp = clean_me->next;
|
||||
free(clean_me);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user