]> git.ipfire.org Git - thirdparty/haproxy.git/commitdiff
[BUG] ensure that we correctly re-start old process in case of error
authorWilly Tarreau <w@1wt.eu>
Tue, 9 Jun 2009 12:36:00 +0000 (14:36 +0200)
committerWilly Tarreau <w@1wt.eu>
Tue, 9 Jun 2009 12:36:00 +0000 (14:36 +0200)
When a new process fails to grab some ports, it sends a signal to
the old process in order to release them. Then it tries to bind
again. If it still fails (eg: one of the ports is bound to a
completely different process), it must send the continue signal
to the old process so that this one re-binds to the ports. This
is correctly done, but the newly bound ports are not released
first, which sometimes causes the old process to remain running
with no port bound. The fix simply consists in unbinding all
ports before sending the signal to the old process.

src/haproxy.c

index e656859e14000b573afdcdfa246f0b3ddc84b19d..68c8b4b4722aa193b3804a2d5b8429bc981d8c60 100644 (file)
@@ -950,8 +950,10 @@ int main(int argc, char **argv)
 
        /* Note: start_proxies() sends an alert when it fails. */
        if ((err & ~ERR_WARN) != ERR_NONE) {
-               if (retry != MAX_START_RETRIES && nb_oldpids)
+               if (retry != MAX_START_RETRIES && nb_oldpids) {
+                       protocol_unbind_all(); /* cleanup everything we can */
                        tell_old_pids(SIGTTIN);
+               }
                exit(1);
        }