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>

Ethan Dickson committed May 15, 2026 at 06:39 UTC d9982e829069afeae191254c5ad63d465ec7dade
1 file changed +2
connected.c
+2
@@ -91,6 +91,8 @@ promisor_pack_found:
91 ;
92 } while ((oid = fn(cb_data)) != NULL);
93 free(new_pack);
94 + if (opt->err_fd)
95 + close(opt->err_fd);
96 return 0;
97 }
98