1 From ff12090bf067a1ddd56bed14cf27371cdf2e77cb Mon Sep 17 00:00:00 2001
2 From: Willy Tarreau <w@1wt.eu>
3 Date: Mon, 7 Jul 2014 21:06:24 +0200
4 Subject: [PATCH 17/21] MEDIUM: listener: support rebinding during resume()
6 When a listener resumes operations, supporting a full rebind makes it
7 possible to perform a full stop as a pause(). This will be used for
8 pausing abstract namespace unix sockets.
9 (cherry picked from commit 1c4b814087189b4b0225a473b7cb0a844bc30839)
11 src/listener.c | 18 +++++++++++++++++-
12 1 file changed, 17 insertions(+), 1 deletion(-)
14 diff --git a/src/listener.c b/src/listener.c
15 index 67f8ca7..11df69f 100644
18 @@ -120,10 +120,26 @@ int pause_listener(struct listener *l)
19 * may replace enable_listener(). The resulting state will either be LI_READY
20 * or LI_FULL. 0 is returned in case of failure to resume (eg: dead socket).
21 * Listeners bound to a different process are not woken up unless we're in
23 + * foreground mode. If the listener was only in the assigned state, it's totally
24 + * rebound. This can happen if a pause() has completely stopped it. If the
25 + * resume fails, 0 is returned and an error might be displayed.
27 int resume_listener(struct listener *l)
29 + if (l->state == LI_ASSIGNED) {
33 + err = l->proto->bind(l, msg, sizeof(msg));
34 + if (err & ERR_ALERT)
35 + Alert("Resuming listener: %s\n", msg);
36 + else if (err & ERR_WARN)
37 + Warning("Resuming listener: %s\n", msg);
39 + if (err & (ERR_FATAL | ERR_ABORT))
43 if (l->state < LI_PAUSED)