Skip to content

Commit 3e8b06d

Browse files
peffgitster
authored andcommitted
send-pack: isolate sigpipe in demuxer thread
If we get an error from pack-objects, we may exit send_pack() early, before reading the server's status response. In such a case, we may racily see SIGPIPE from our async demuxer (which is trying to write that status back to us), and we'd prefer to continue pushing the error up the call stack, rather than taking down the whole process with signal death. This is safe to do because our demuxer just calls recv_sideband, whose data writes are all done with write_or_die(), which will notice SIGPIPE. We do also write sideband 2 to stderr, and we would no longer die on SIGPIPE there (if it were piped in the first place, and if the piped program went away). But that's probably a good thing, as it likewise should not abort the push process at all (neither immediately by signal, nor eventually by reporting failure back to the main thread). Signed-off-by: Jeff King <peff@peff.net> Signed-off-by: Junio C Hamano <gitster@pobox.com>
1 parent c792d7b commit 3e8b06d

1 file changed

Lines changed: 1 addition & 0 deletions

File tree

send-pack.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -518,6 +518,7 @@ int send_pack(struct send_pack_args *args,
518518
demux.proc = sideband_demux;
519519
demux.data = fd;
520520
demux.out = -1;
521+
demux.isolate_sigpipe = 1;
521522
if (start_async(&demux))
522523
die("send-pack: unable to fork off sideband demultiplexer");
523524
in = demux.out;

0 commit comments

Comments
 (0)