fetch-pack: close output channel after sideband demultiplexer terminates
commit3ef67cf250b14b9c62b2bd21e4d0d5339f5f31e5
authorJohannes Sixt <j6t@kdbg.org>
Mon, 8 Jun 2009 08:51:22 +0000 (8 10:51 +0200)
committerJunio C Hamano <gitster@pobox.com>
Tue, 9 Jun 2009 04:18:41 +0000 (8 21:18 -0700)
treeae4219712b1182374188250e49966865e240cb5e
parent956d27a872a70f40f98c3f710553ef619959e212
fetch-pack: close output channel after sideband demultiplexer terminates

fetch-pack runs the sideband demultiplexer using start_async(). This
facility requires that the asynchronously executed function closes the
output file descriptor (see Documentation/technical/api-run-command.txt).
But the sideband demultiplexer did not do that. This fixes it.

In certain error situations this could lock up a fetch operation on
Windows because the asynchronous function is run in a thread; by not
closing the output fd the reading end never got EOF and waited for more
data indefinitely. On Unix this is not a problem because the asynchronous
function is run in a separate process, which exits after the function ends
and so implicitly closes the output.

Since the pack that is sent over the wire encodes the number of objects in
the stream, during normal operation the reading end knows when the stream
ends and terminates by itself, and does not lock up.

Signed-off-by: Johannes Sixt <j6t@kdbg.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
builtin-fetch-pack.c