Merge branch 'cb/daemon-retry-interrupted-accept'
When "git daemon" sees a signal while attempting to accept() a new client, instead of retrying, it skipped it by mistake, which has been corrected. * cb/daemon-retry-interrupted-accept: daemon: correctly handle soft accept() errors in service_loopmaint
commit
844911960c
12
daemon.c
12
daemon.c
|
@ -1148,11 +1148,19 @@ static int service_loop(struct socketlist *socklist)
|
|||
#endif
|
||||
} ss;
|
||||
socklen_t sslen = sizeof(ss);
|
||||
int incoming = accept(pfd[i].fd, &ss.sa, &sslen);
|
||||
int incoming;
|
||||
int retry = 3;
|
||||
|
||||
redo:
|
||||
incoming = accept(pfd[i].fd, &ss.sa, &sslen);
|
||||
if (incoming < 0) {
|
||||
switch (errno) {
|
||||
case EAGAIN:
|
||||
case EINTR:
|
||||
if (--retry)
|
||||
goto redo;
|
||||
|
||||
/* fallthrough */
|
||||
case EAGAIN:
|
||||
case ECONNABORTED:
|
||||
continue;
|
||||
default:
|
||||
|
|
Loading…
Reference in New Issue