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
index 79403108dd..6d7549a0f7 100644
--- a/connected.c
+++ b/connected.c
@@ -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;
}