BUG/MEDIUM: listener: only enable a listening listener if needed
The test on listener->state == LI_LISTEN is not sufficient to decide
if we need to enable a listener. Indeed, there is a very special case
which is the inherited FD shared, which has to reflect the real socket
state even after the previous test, and as such needs to remain in
LI_LISTEN state. In this case we don't want a worker to start the
master's listener nor conversely. Let's add a specific test for this.
diff --git a/src/listener.c b/src/listener.c
index 1947fdb..7f038c4 100644
--- a/src/listener.c
+++ b/src/listener.c
@@ -257,7 +257,8 @@
if (listener->state == LI_LISTEN) {
BUG_ON(listener->rx.fd == -1);
if ((global.mode & (MODE_DAEMON | MODE_MWORKER)) &&
- !(proc_mask(listener->rx.settings->bind_proc) & pid_bit)) {
+ (!!master != !!(listener->rx.flags & RX_F_MWORKER) ||
+ !(proc_mask(listener->rx.settings->bind_proc) & pid_bit))) {
/* we don't want to enable this listener and don't
* want any fd event to reach it.
*/