BUG/MINOR: listeners: fix suspend/resume of inherited FDs

FDs inherited from a parent process do not deal well with suspend/resume
since commit 59b5da487 ("BUG/MEDIUM: listener: never suspend inherited
sockets") introduced in 2.3. The problem is that we now report that they
cannot be suspended at all, and they return a failure. As such, if a new
process fails to bind and sends SIGTTOU to the previous process, that
one will notice the failure and instantly switch to soft-stop, leaving
no chance to the new process to give up later and signal its failure.

What we need to do, however, is to stop receiving new connections from
such inherited FDs, which just means that the FD must be unsubscribed
from the poller (and resubscribed later if finally it has to stay).
With this a new process can start on the already bound FD without
problem thanks to the absence of polling, and when the old process
stops the new process will be alone on it.

This may be backported as far as 2.4.

(cherry picked from commit 64763342aa0d620e38e29387441ecd78e10c660b)
Signed-off-by: Willy Tarreau <w@1wt.eu>
(cherry picked from commit 0f6663b9acce9a9fbeafbac3a56f17fbab0b741c)
Signed-off-by: Christopher Faulet <cfaulet@haproxy.com>
(cherry picked from commit dad6068c35b0a94521c29535808add46837c5d65)
Signed-off-by: Christopher Faulet <cfaulet@haproxy.com>
(cherry picked from commit 036e11d0d0f7f9ac9069cce172967901b37dd5a6)
Signed-off-by: Christopher Faulet <cfaulet@haproxy.com>
2 files changed