Merge branch 'sb/submodule-parallel-fetch'
Add a framework to spawn a group of processes in parallel, and use it to run "git fetch --recurse-submodules" in parallel. Rerolled and this seems to be a lot cleaner. The merge of the earlier one to 'next' has been reverted. * sb/submodule-parallel-fetch: submodules: allow parallel fetching, add tests and documentation fetch_populated_submodules: use new parallel job processing run-command: add an asynchronous parallel child processor sigchain: add command to pop all common signals strbuf: add strbuf_read_once to read without blocking xread: poll on non blocking fds submodule.c: write "Fetching submodule <foo>" to stderr
This commit is contained in:
20
wrapper.c
20
wrapper.c
@ -236,8 +236,24 @@ ssize_t xread(int fd, void *buf, size_t len)
|
||||
len = MAX_IO_SIZE;
|
||||
while (1) {
|
||||
nr = read(fd, buf, len);
|
||||
if ((nr < 0) && (errno == EAGAIN || errno == EINTR))
|
||||
continue;
|
||||
if (nr < 0) {
|
||||
if (errno == EINTR)
|
||||
continue;
|
||||
if (errno == EAGAIN || errno == EWOULDBLOCK) {
|
||||
struct pollfd pfd;
|
||||
pfd.events = POLLIN;
|
||||
pfd.fd = fd;
|
||||
/*
|
||||
* it is OK if this poll() failed; we
|
||||
* want to leave this infinite loop
|
||||
* only when read() returns with
|
||||
* success, or an expected failure,
|
||||
* which would be checked by the next
|
||||
* call to read(2).
|
||||
*/
|
||||
poll(&pfd, 1, -1);
|
||||
}
|
||||
}
|
||||
return nr;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user