connected: close err_fd in promisor fast-path

connected.h documents that err_fd is closed before check_connected()
returns. It is, on three of four exit paths. The promisor-pack fast
path added in 50033772d (connected: verify promisor-ness of partial
clone, 2020-01-30) returns 0 without closing it.

receive-pack uses err_fd as the write end of an async sideband
muxer's pipe, and the muxer thread waits for EOF. The same omission
has caused deadlocks there twice before: 49ecfa13f (receive-pack:
close sideband fd on early pack errors, 2013-04-19) and 6cdad1f13
(receive-pack: fix deadlock when we cannot create tmpdir,
2017-03-07).

Signed-off-by: Ethan Dickson <ethanndickson@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
main
Ethan Dickson 2026-05-15 06:39:54 +00:00 committed by Junio C Hamano
parent 67ad42147a
commit d9982e8290
1 changed files with 2 additions and 0 deletions

View File

@ -91,6 +91,8 @@ promisor_pack_found:
;
} while ((oid = fn(cb_data)) != NULL);
free(new_pack);
if (opt->err_fd)
close(opt->err_fd);
return 0;
}