BUG/MEDIUM: pollers/kqueue: use incremented position in event list
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
diff --git a/src/ev_kqueue.c b/src/ev_kqueue.c
index ac5b7c5..bf7f666 100644
--- a/src/ev_kqueue.c
+++ b/src/ev_kqueue.c
@@ -33,10 +33,10 @@
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 @@
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 @@
continue;
if (!fdtab[fd].owner)
continue;
- changes += _update_fd(fd);
+ changes = _update_fd(fd, changes);
}
if (changes) {