From: Frédéric Lécaille Date: Wed, 27 Mar 2019 13:32:39 +0000 (+0100) Subject: BUG/MINOR: peers: Missing initializations after peer session shutdown. X-Git-Tag: v2.0-dev3~375 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=b7405c1c5071bb17154a625fbc5b46da5c6a9cf4;p=thirdparty%2Fhaproxy.git BUG/MINOR: peers: Missing initializations after peer session shutdown. This patch fixes a bug introduced by 045e0d4 commit where it was really a bad idea to reset the peer applet context before shutting down the underlying session. This had as side effect to cancel the re-initializations done by peer_session_release(), especially prevented this function from re-initializing the current table pointer which is there to force annoucement of stick-table definitions on when reconnecting. Consequently the peers could send stick-table update messages without a first stick-table definition message. As this is forbidden, this leaded the remote peers to close the sessions. --- diff --git a/src/peers.c b/src/peers.c index 10045c62c8..a210de37f2 100644 --- a/src/peers.c +++ b/src/peers.c @@ -2505,7 +2505,6 @@ static struct task *process_peer_sync(struct task * task, void *context, unsigne else { ps->reconnect = tick_add(now_ms, MS_TO_TICKS(50 + random() % 2000)); peer_session_forceshutdown(ps->appctx); - ps->appctx = NULL; } } else if (tick_is_expired(ps->heartbeat, now_ms)) { @@ -2513,8 +2512,7 @@ static struct task *process_peer_sync(struct task * task, void *context, unsigne ps->flags |= PEER_F_HEARTBEAT; appctx_wakeup(ps->appctx); } - if (ps->appctx) - task->expire = tick_first(ps->reconnect, ps->heartbeat); + task->expire = tick_first(ps->reconnect, ps->heartbeat); } } /* else do nothing */