BGP connect retry timer is unconditionally started in bgp_connect(), which will be stopped by bgp_send_open() in bgp_connected() with successful connection. However, if the sk_connect() in sk_open() immediately succeeds, this code path will be immediately called. This happens before the timer is even started, thus the timer will never be stopped again.
Signed-off-by: Ze Xia <[email protected]> --- proto/bgp/bgp.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/proto/bgp/bgp.c b/proto/bgp/bgp.c index ad51e626..6358afc6 100644 --- a/proto/bgp/bgp.c +++ b/proto/bgp/bgp.c @@ -1628,8 +1628,10 @@ bgp_connect(struct bgp_proto *p) /* Enter Connect state and start establishing c s->ao_keys_num = 0; s->ao_keys_init = NULL; - DBG("BGP: Waiting for connect success\n"); - bgp_start_timer(conn->connect_timer, p->cf->connect_retry_time); + if (s->type == SK_TCP_ACTIVE) { + DBG("BGP: Waiting for connect success\n"); + bgp_start_timer(p, conn->connect_timer, p->cf->connect_retry_time); + } return; err: -- 2.45.2
