basic/socket-util: put a limit on the loop to flush connections
Follow-up for #12346.
This commit is contained in:
parent
644cb4cc7a
commit
67962036f6
|
@ -1219,6 +1219,10 @@ fallback:
|
|||
return (ssize_t) k;
|
||||
}
|
||||
|
||||
/* Put a limit on how many times will attempt to call accept4(). We loop
|
||||
* only on "transient" errors, but let's make sure we don't loop forever. */
|
||||
#define MAX_FLUSH_ITERATIONS 1024
|
||||
|
||||
int flush_accept(int fd) {
|
||||
|
||||
struct pollfd pollfd = {
|
||||
|
@ -1242,7 +1246,7 @@ int flush_accept(int fd) {
|
|||
* we can loop safely on transient errors below. */
|
||||
return -ENOTTY;
|
||||
|
||||
for (;;) {
|
||||
for (unsigned iteration = 0;; iteration++) {
|
||||
int cfd;
|
||||
|
||||
r = poll(&pollfd, 1, 0);
|
||||
|
@ -1255,6 +1259,10 @@ int flush_accept(int fd) {
|
|||
if (r == 0)
|
||||
return 0;
|
||||
|
||||
if (iteration >= MAX_FLUSH_ITERATIONS)
|
||||
return log_debug_errno(SYNTHETIC_ERRNO(EBUSY),
|
||||
"Failed to flush connections within " STRINGIFY(MAX_FLUSH_ITERATIONS) " iterations.");
|
||||
|
||||
cfd = accept4(fd, NULL, NULL, SOCK_NONBLOCK|SOCK_CLOEXEC);
|
||||
if (cfd < 0) {
|
||||
if (errno == EAGAIN)
|
||||
|
|
Loading…
Reference in a new issue