diff options
author | Todd C. Miller <Todd.Miller@sudo.ws> | 2022-06-07 09:25:07 -0600 |
---|---|---|
committer | Todd C. Miller <Todd.Miller@sudo.ws> | 2022-06-07 09:25:07 -0600 |
commit | 1fa397dd5d2e8ed0be0e2c0fe372f5eefd680f52 (patch) | |
tree | 5a63222e332628e55cf7e2e99a375c507ffadfcc | |
parent | 2ebb3cd1d8790ddf764cebff43030538f6c507cb (diff) | |
download | sudo-1fa397dd5d2e8ed0be0e2c0fe372f5eefd680f52.tar.gz |
Treat EINTR in a callback like we do EAGAIN.
We shouldn't get EINTR in practice since we set SA_RESTART when
registering signal handlers but it doesn't hurt to be consistent.
-rw-r--r-- | logsrvd/logsrvd.c | 9 | ||||
-rw-r--r-- | logsrvd/logsrvd_relay.c | 4 | ||||
-rw-r--r-- | logsrvd/sendlog.c | 4 |
3 files changed, 9 insertions, 8 deletions
diff --git a/logsrvd/logsrvd.c b/logsrvd/logsrvd.c index 23d85b410..4bf739ff5 100644 --- a/logsrvd/logsrvd.c +++ b/logsrvd/logsrvd.c @@ -929,7 +929,7 @@ server_msg_cb(int fd, int what, void *v) } if (nwritten == -1) { - if (errno == EAGAIN) + if (errno == EAGAIN || errno == EINTR) debug_return; sudo_warn("%s: write", closure->ipaddr); goto finished; @@ -1045,7 +1045,7 @@ client_msg_cb(int fd, int what, void *v) __func__, nread, closure->ipaddr); switch (nread) { case -1: - if (errno == EAGAIN) + if (errno == EAGAIN || errno == EINTR) debug_return; sudo_warn("%s: read", closure->ipaddr); goto close_connection; @@ -1521,9 +1521,10 @@ listener_cb(int fd, int what, void *v) "unable to start new connection"); } } else { - if (errno != EAGAIN) - sudo_warn("accept"); + if (errno == EAGAIN || errno == EINTR) + debug_return; /* TODO: pause accepting on ENFILE and EMFILE */ + sudo_warn("accept"); } debug_return; diff --git a/logsrvd/logsrvd_relay.c b/logsrvd/logsrvd_relay.c index 1cd404fbe..6937ed82c 100644 --- a/logsrvd/logsrvd_relay.c +++ b/logsrvd/logsrvd_relay.c @@ -799,7 +799,7 @@ relay_server_msg_cb(int fd, int what, void *v) relay_closure->relay_name.name, relay_closure->relay_name.ipaddr); switch (nread) { case -1: - if (errno == EAGAIN) + if (errno == EAGAIN || errno == EINTR) debug_return; sudo_warn("%s: read", relay_closure->relay_name.ipaddr); closure->errstr = _("unable to read from relay"); @@ -970,7 +970,7 @@ relay_client_msg_cb(int fd, int what, void *v) { nwritten = write(fd, buf->data + buf->off, buf->len - buf->off); if (nwritten == -1) { - if (errno == EAGAIN) + if (errno == EAGAIN || errno == EINTR) debug_return; sudo_warn("%s: write", relay_closure->relay_name.ipaddr); closure->errstr = _("error writing to relay"); diff --git a/logsrvd/sendlog.c b/logsrvd/sendlog.c index 9417dbe53..50d7f59c1 100644 --- a/logsrvd/sendlog.c +++ b/logsrvd/sendlog.c @@ -1359,7 +1359,7 @@ server_msg_cb(int fd, int what, void *v) __func__, nread); switch (nread) { case -1: - if (errno == EAGAIN) + if (errno == EAGAIN || errno == EINTR) debug_return; sudo_warn("recv"); goto bad; @@ -1479,7 +1479,7 @@ client_msg_cb(int fd, int what, void *v) nwritten = send(fd, buf->data + buf->off, buf->len - buf->off, 0); } if (nwritten == -1) { - if (errno == EAGAIN) + if (errno == EAGAIN || errno == EINTR) debug_return; sudo_warn("send"); goto bad; |