Magellan Linux

Annotation of /trunk/systemd/patches/systemd-242-socket-util-put-a-limit-on-the-loop-to-flush-connections.patch

Parent Directory Parent Directory | Revision Log Revision Log


Revision 3368 - (hide annotations) (download)
Tue Jul 9 11:20:22 2019 UTC (4 years, 10 months ago) by niro
File size: 1724 byte(s)
-added systemd-242 upstream patches
1 niro 3368 From 67962036f6c6cfd34828c1f1f1fbdc0018fb9898 Mon Sep 17 00:00:00 2001
2     From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek@in.waw.pl>
3     Date: Tue, 23 Apr 2019 15:24:56 +0200
4     Subject: [PATCH] basic/socket-util: put a limit on the loop to flush
5     connections
6    
7     Follow-up for #12346.
8     ---
9     src/basic/socket-util.c | 10 +++++++++-
10     1 file changed, 9 insertions(+), 1 deletion(-)
11    
12     diff --git a/src/basic/socket-util.c b/src/basic/socket-util.c
13     index cf2e08c2df8..32a0d9c5d06 100644
14     --- a/src/basic/socket-util.c
15     +++ b/src/basic/socket-util.c
16     @@ -1219,6 +1219,10 @@ ssize_t next_datagram_size_fd(int fd) {
17     return (ssize_t) k;
18     }
19    
20     +/* Put a limit on how many times will attempt to call accept4(). We loop
21     + * only on "transient" errors, but let's make sure we don't loop forever. */
22     +#define MAX_FLUSH_ITERATIONS 1024
23     +
24     int flush_accept(int fd) {
25    
26     struct pollfd pollfd = {
27     @@ -1242,7 +1246,7 @@ int flush_accept(int fd) {
28     * we can loop safely on transient errors below. */
29     return -ENOTTY;
30    
31     - for (;;) {
32     + for (unsigned iteration = 0;; iteration++) {
33     int cfd;
34    
35     r = poll(&pollfd, 1, 0);
36     @@ -1255,6 +1259,10 @@ int flush_accept(int fd) {
37     if (r == 0)
38     return 0;
39    
40     + if (iteration >= MAX_FLUSH_ITERATIONS)
41     + return log_debug_errno(SYNTHETIC_ERRNO(EBUSY),
42     + "Failed to flush connections within " STRINGIFY(MAX_FLUSH_ITERATIONS) " iterations.");
43     +
44     cfd = accept4(fd, NULL, NULL, SOCK_NONBLOCK|SOCK_CLOEXEC);
45     if (cfd < 0) {
46     if (errno == EAGAIN)