mirror of
https://github.com/git/git.git
synced 2024-11-24 18:33:43 +08:00
receive-pack: fix deadlock when we cannot create tmpdir
The err_fd descriptor passed to the unpack() function is intended to be handed off to the child index-pack, and our async muxer will read until it gets EOF. However, if we encounter an error before handing off the descriptor, we must manually close(err_fd). Otherwise we will be waiting for our muxer to finish, while the muxer is waiting for EOF on err_fd. We fixed an identical deadlock already in49ecfa13f
(receive-pack: close sideband fd on early pack errors, 2013-04-19). But since then, the function grew a new early-return in722ff7f87
(receive-pack: quarantine objects until pre-receive accepts, 2016-10-03), when we fail to create a temporary directory. This return needs the same treatment. Reported-by: Horst Schirmeier <horst@schirmeier.com> Signed-off-by: Jeff King <peff@peff.net> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
parent
454cb6bd52
commit
6cdad1f133
@ -1664,8 +1664,11 @@ static const char *unpack(int err_fd, struct shallow_info *si)
|
||||
}
|
||||
|
||||
tmp_objdir = tmp_objdir_create();
|
||||
if (!tmp_objdir)
|
||||
if (!tmp_objdir) {
|
||||
if (err_fd > 0)
|
||||
close(err_fd);
|
||||
return "unable to create temporary object directory";
|
||||
}
|
||||
child.env = tmp_objdir_env(tmp_objdir);
|
||||
|
||||
/*
|
||||
|
Loading…
Reference in New Issue
Block a user