Skip to content

Commit 8449119

Browse files
committed
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_loop
2 parents d4a59c5 + 78b6601 commit 8449119

File tree

1 file changed

+10
-2
lines changed

1 file changed

+10
-2
lines changed

daemon.c

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1148,11 +1148,19 @@ static int service_loop(struct socketlist *socklist)
11481148
#endif
11491149
} ss;
11501150
socklen_t sslen = sizeof(ss);
1151-
int incoming = accept(pfd[i].fd, &ss.sa, &sslen);
1151+
int incoming;
1152+
int retry = 3;
1153+
1154+
redo:
1155+
incoming = accept(pfd[i].fd, &ss.sa, &sslen);
11521156
if (incoming < 0) {
11531157
switch (errno) {
1154-
case EAGAIN:
11551158
case EINTR:
1159+
if (--retry)
1160+
goto redo;
1161+
1162+
/* fallthrough */
1163+
case EAGAIN:
11561164
case ECONNABORTED:
11571165
continue;
11581166
default:

0 commit comments

Comments
 (0)