]> git.ipfire.org Git - thirdparty/haproxy.git/commitdiff
BUG/MEDIUM: peers: reset commitupdate value in new conns
authorEmeric Brun <ebrun@haproxy.com>
Tue, 23 Feb 2021 16:08:08 +0000 (17:08 +0100)
committerWilly Tarreau <w@1wt.eu>
Wed, 28 Apr 2021 12:23:10 +0000 (14:23 +0200)
The commitupdate value of the table is used to check if the update
is still pending for a push for all peers. To be sure to not miss a
push we reset it just after a handshake success.

This patch should be backported on all supported branches ( >= 1.6 )

src/peers.c

index b473a4ccb73f872ecb1306bdc1aea7e5e9d638ea..16a2fdb43fad40c4bd7429d3479882e7fc4ceae1 100644 (file)
@@ -2409,6 +2409,8 @@ static inline void init_accepted_peer(struct peer *peer, struct peers *peers)
                if ((int)(st->table->localupdate - st->update) < 0)
                        st->update = st->table->localupdate + (2147483648U);
                st->teaching_origin = st->last_pushed = st->update;
+               if ((int)(st->last_pushed - st->table->commitupdate) > 0)
+                       st->table->commitupdate = st->last_pushed;
                HA_SPIN_UNLOCK(STK_TABLE_LOCK, &st->table->lock);
        }
 
@@ -2459,6 +2461,8 @@ static inline void init_connected_peer(struct peer *peer, struct peers *peers)
                if ((int)(st->table->localupdate - st->update) < 0)
                        st->update = st->table->localupdate + (2147483648U);
                st->teaching_origin = st->last_pushed = st->update;
+               if ((int)(st->last_pushed - st->table->commitupdate) > 0)
+                       st->table->commitupdate = st->last_pushed;
                HA_SPIN_UNLOCK(STK_TABLE_LOCK, &st->table->lock);
        }