From: Willy Tarreau Date: Tue, 14 Apr 2015 10:07:16 +0000 (+0200) Subject: BUG/MEDIUM: listener: don't report an error when resuming unbound listeners X-Git-Tag: v1.6-dev2~210 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=af2fd584f32ec72b3d6d27a915f15df8041b56e7;p=thirdparty%2Fhaproxy.git BUG/MEDIUM: listener: don't report an error when resuming unbound listeners Pavlos Parissis reported that a sequence of disable/enable on a frontend performed on the CLI can result in an error if the frontend has several "bind" lines each bound to different processes. This is because the resume_listener() function returns a failure for frontends not part of the current process instead of returning a success to pretend there was no failure. This fix should be backported to 1.5. --- diff --git a/src/listener.c b/src/listener.c index 86f5d5a99c..017dcff4b1 100644 --- a/src/listener.c +++ b/src/listener.c @@ -121,9 +121,10 @@ int pause_listener(struct listener *l) * may replace enable_listener(). The resulting state will either be LI_READY * or LI_FULL. 0 is returned in case of failure to resume (eg: dead socket). * Listeners bound to a different process are not woken up unless we're in - * foreground mode. If the listener was only in the assigned state, it's totally - * rebound. This can happen if a pause() has completely stopped it. If the - * resume fails, 0 is returned and an error might be displayed. + * foreground mode, and are ignored. If the listener was only in the assigned + * state, it's totally rebound. This can happen if a pause() has completely + * stopped it. If the resume fails, 0 is returned and an error might be + * displayed. */ int resume_listener(struct listener *l) { @@ -147,7 +148,7 @@ int resume_listener(struct listener *l) if ((global.mode & (MODE_DAEMON | MODE_SYSTEMD)) && l->bind_conf->bind_proc && !(l->bind_conf->bind_proc & (1UL << (relative_pid - 1)))) - return 0; + return 1; if (l->proto->sock_prot == IPPROTO_TCP && l->state == LI_PAUSED &&