BUG/MEDIUM: pollers: clear the sleeping bit after waking up, not before
authorWilly Tarreau <w@1wt.eu>
Fri, 30 Jul 2021 08:57:09 +0000 (10:57 +0200)
committerWilly Tarreau <w@1wt.eu>
Thu, 12 Aug 2021 15:00:26 +0000 (17:00 +0200)
commit54d6add4e51d63e1c668ae3062f73a1064e763d8
tree871644bf7f07bef5c8032445dbb9188983c49384
parent58c8cb72dfc03ceb4bdd9c94de5e3668a83ba8b9
BUG/MEDIUM: pollers: clear the sleeping bit after waking up, not before

A bug was introduced in 2.1-dev2 by commit 305d5ab46 ("MAJOR: fd: Get
rid of the fd cache."). Pollers "poll" and "evport" had the sleeping
bit accidentally removed before the syscall instead of after. This
results in them not being woken up by inter-thread wakeups, which is
particularly visible with the multi-queue accept() and with queues.

As a work-around, when these pollers are used, "nbthread 1" should
be used.

The fact that it has remained broken for 2 years is a great indication
that threads are definitely not enabled outside of epoll and kqueue,
hence why this patch is only tagged medium.

This must be backported as far as 2.2.

(cherry picked from commit c37ccd70b4f622a4148cb63d3b584357b02cda47)
Signed-off-by: Willy Tarreau <w@1wt.eu>
(cherry picked from commit e148cb042ef64410c80b4d9e62165172c935bba3)
Signed-off-by: Willy Tarreau <w@1wt.eu>
src/ev_evports.c
src/ev_poll.c