]> git.ipfire.org Git - thirdparty/haproxy.git/commitdiff
BUG/MEDIUM: pollers/kqueue: use incremented position in event list
authorPiBa-NL <PiBa.NL.dev@gmail.com>
Wed, 9 May 2018 23:01:28 +0000 (01:01 +0200)
committerWilly Tarreau <w@1wt.eu>
Fri, 11 May 2018 12:08:56 +0000 (14:08 +0200)
When composing the event list for subscribe to kqueue events, the index
where the new event is added must be after the previous events, as such
the changes counter should continue counting.

This caused haproxy to accept connections but not try read and process
the incoming data.

This patch is for 1.9 only

src/ev_kqueue.c

index ac5b7c512fc35a0d1a552601ceb88995b8bd5a8e..bf7f666dc8147213626a6ff206e7dd48a9885a8f 100644 (file)
@@ -33,10 +33,10 @@ static int kqueue_fd[MAX_THREADS]; // per-thread kqueue_fd
 static THREAD_LOCAL struct kevent *kev = NULL;
 static struct kevent *kev_out = NULL; // Trash buffer for kevent() to write the eventlist in
 
-static int _update_fd(int fd)
+static int _update_fd(int fd, int start)
 {
        int en;
-       int changes = 0;
+       int changes = start;
 
        en = fdtab[fd].state;
 
@@ -91,7 +91,7 @@ REGPRM2 static void _do_poll(struct poller *p, int exp)
                        activity[tid].poll_drop++;
                        continue;
                }
-               changes += _update_fd(fd);
+               changes = _update_fd(fd, changes);
        }
        /* Scan the global update list */
        for (old_fd = fd = update_list.first; fd != -1; fd = fdtab[fd].update.next) {
@@ -109,7 +109,7 @@ REGPRM2 static void _do_poll(struct poller *p, int exp)
                        continue;
                if (!fdtab[fd].owner)
                        continue;
-               changes += _update_fd(fd);
+               changes = _update_fd(fd, changes);
        }
 
        if (changes) {