Correctly handle failure of pipe() call in swap_to_tcp()

This commit is contained in:
Simon Kelley
2025-01-06 23:16:40 +00:00
parent e24c341068
commit c52653f97c
2 changed files with 7 additions and 7 deletions

View File

@@ -2091,11 +2091,11 @@ int swap_to_tcp(struct frec *forward, time_t now, int status, struct dns_header
if (daemon->tcp_pids[i] == 0 && daemon->tcp_pipes[i] == -1)
break;
/* No slots */
if (i < 0)
return STAT_ABANDONED;
if (pipe(pipefd) == 0 && (p = fork()) != 0)
/* No slots or no pipe */
if (i < 0 || pipe(pipefd) != 0)
return STAT_ABANDONED;`
if ((p = fork()) != 0)
{
close(pipefd[1]); /* parent needs read pipe end. */
if (p == -1)

View File

@@ -767,8 +767,8 @@ int retry_send(ssize_t rc)
/* rw = 0 -> write
rw = 1 -> read
rw = 2 -> read once
rw = 3 -> write once
rw = 2 -> write once
rw = 3 -> read once
"once" fail if all the data doesn't arrive/go in a single read/write.
This indicates a timeout of a TCP socket.