From d9982e829069afeae191254c5ad63d465ec7dade Mon Sep 17 00:00:00 2001 From: Ethan Dickson Date: Fri, 15 May 2026 06:39:54 +0000 Subject: [PATCH] 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 Signed-off-by: Junio C Hamano --- connected.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/connected.c b/connected.c 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; }