git/list[1] front-page[2] threads[3] people[4] search[5] about
 

[PATCH v3] daemon: correctly handle soft accept() errors in service_loop

From
Carlo Marcelo Arenas Belón <carenas@gmail.com>
Date
Jun 27, 2025, 23:14 UTC
Message-ID
<20250627231404.27100-1-carenas@gmail.com>
In-Reply-To
<20250626172159.87204-1-carenas@gmail.com>

Since df076bdbcc ([PATCH] GIT: Listen on IPv6 as well, if available., 2005-07-23), the original error checking was included in an inner loop unchanged, where its effect was different.

Instead of retrying, after a EINTR during accept() in the listening socket, it will advance to the next one and try with that instead, leaving the client waiting for another round.

Make sure to retry with the same listener socket that failed originally.

To avoid an unlikely busy loop, fallback to the old behaviour after a couple of attempts.

Signed-off-by: Carlo Marcelo Arenas Belón <carenas@gmail.com>
---
 daemon.c | 12 ++++++++++--
 1 file changed, 10 insertions(+), 2 deletions(-)
diff --git a/daemon.c b/daemon.c
index d1be61fd57..9ac9efa17c 100644
--- a/daemon.c
+++ b/daemon.c
@@ -1153,11 +1153,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:
-- 
2.50.0.132.g195eec4876.dirty
Previous: Phillip WoodNext: Phillip Wood
Message 11 of 14 in “daemon: correctly handle soft accept() errors”
  1. daemon: correctly handle soft accept() errorsCarlo Marcelo Arenas Belón, Jun 26, 2025
  2. Kristoffer HaugsbakkJun 26, 2025
  3. daemon: correctly handle soft accept() errors in service_loopCarlo Marcelo Arenas Belón, Jun 26, 2025
  4. Phillip WoodJun 27, 2025
  5. Carlo Marcelo Arenas BelónJun 27, 2025
  6. Junio C HamanoJun 27, 2025
  7. Carlo Marcelo Arenas BelónJun 27, 2025
  8. Hridoy AhmedJun 27, 2025
  9. Junio C HamanoJun 27, 2025
  10. Phillip WoodJun 30, 2025
  11. daemon: correctly handle soft accept() errors in service_loopCarlo Marcelo Arenas Belón, Jun 27, 2025
  12. Phillip WoodJun 30, 2025
  13. Junio C HamanoJun 30, 2025
  14. Phillip WoodJul 1, 2025

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.