From: Willy Tarreau Date: Fri, 1 May 2015 16:32:13 +0000 (+0200) Subject: MEDIUM: peers: unregister peers that were never started X-Git-Tag: v1.6-dev2~155 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=46dc1ca;p=thirdparty%2Fhaproxy.git MEDIUM: peers: unregister peers that were never started The peers initialization sequence is a bit complex, they're attached to stick-tables and initialized very early in the boot process. When we fork, if some must not start, it's too late to find them. Instead, simply add a guard in their respective tasks to stop them once they want to start. --- diff --git a/src/peers.c b/src/peers.c index d39898a574..59f934d780 100644 --- a/src/peers.c +++ b/src/peers.c @@ -1204,6 +1204,15 @@ static struct task *process_peer_sync(struct task * task) task->expire = TICK_ETERNITY; + if (!st->sessions->peer->peers->peers_fe) { + /* this one was never started, kill it */ + signal_unregister_handler(st->sighandler); + st->table->sync_task = NULL; + task_delete(st->sync_task); + task_free(st->sync_task); + return NULL; + } + if (!stopping) { /* Normal case (not soft stop)*/ if (((st->flags & SHTABLE_RESYNC_STATEMASK) == SHTABLE_RESYNC_FROMLOCAL) &&