mirror of
https://git.haproxy.org/git/haproxy.git/
synced 2026-05-05 04:56:10 +02:00
BUG/MINOR: cli: Wait for the last ACK when FDs are xferred from the old worker
On reload, the new worker requests bound FDs to the old one. The old worker sends them in message of at most 252 FDs. Each message is acknowledged by the new worker. All messages sent or received by the old worker are handled manually via sendmsg/recv syscalls. So the old worker must be sure consume all the ACK replies. However, the last one was never consumed. So it was considered as a command by the CLI applet. This issue was hidden since recently. But it was the root cause of the issue #2862. Note this last ack is also the first one when there are less than 252 FDs to transfer. This patch must be backported to all stable versions.
This commit is contained in:
parent
972ce87676
commit
49b7bcf583
10
src/cli.c
10
src/cli.c
@ -2444,6 +2444,16 @@ static int _getsocks(char **args, char *payload, struct appctx *appctx, void *pr
|
||||
ha_warning("Failed to transfer sockets\n");
|
||||
goto out;
|
||||
}
|
||||
|
||||
/* Wait for an ack */
|
||||
do {
|
||||
ret = recv(fd, &tot_fd_nb, sizeof(tot_fd_nb), 0);
|
||||
} while (ret == -1 && errno == EINTR);
|
||||
|
||||
if (ret <= 0) {
|
||||
ha_warning("Unexpected error while transferring sockets\n");
|
||||
goto out;
|
||||
}
|
||||
}
|
||||
|
||||
out:
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user