summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authornicm <nicm>2023-07-10 09:35:46 +0000
committernicm <nicm>2023-07-10 09:35:46 +0000
commit4ece43a02961dc6726e97b05caca9a3c53793826 (patch)
tree0649754d687af7e9d8a50996502c9f2ca8202420
parent8b3e2eab5afde62a4eb87b132b4196105c1cfaa6 (diff)
Loop around waitpid in client, from Azat Khuzhin.
-rw-r--r--client.c17
1 files changed, 14 insertions, 3 deletions
diff --git a/client.c b/client.c
index 4f91d30e..be17540c 100644
--- a/client.c
+++ b/client.c
@@ -526,11 +526,22 @@ client_signal(int sig)
{
struct sigaction sigact;
int status;
+ pid_t pid;
log_debug("%s: %s", __func__, strsignal(sig));
- if (sig == SIGCHLD)
- waitpid(WAIT_ANY, &status, WNOHANG);
- else if (!client_attached) {
+ if (sig == SIGCHLD) {
+ for (;;) {
+ pid = waitpid(WAIT_ANY, &status, WNOHANG);
+ if (pid == 0)
+ break;
+ if (pid == -1) {
+ if (errno == ECHILD)
+ break;
+ log_debug("waitpid failed: %s",
+ strerror(errno));
+ }
+ }
+ } else if (!client_attached) {
if (sig == SIGTERM || sig == SIGHUP)
proc_exit(client_proc);
} else {