From: Maria Matejka Date: Mon, 8 May 2023 16:57:32 +0000 (+0200) Subject: BGP: fix listen socket cleanup X-Git-Tag: v3.0-alpha2~2 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=794f555f63cc662c73e9113fd1eff2ebba4e50ff;p=thirdparty%2Fbird.git BGP: fix listen socket cleanup --- diff --git a/proto/bgp/bgp.c b/proto/bgp/bgp.c index e2a0d7df5..c98f84ab6 100644 --- a/proto/bgp/bgp.c +++ b/proto/bgp/bgp.c @@ -197,13 +197,20 @@ bgp_close(struct bgp_proto *p) struct bgp_listen_request *req = &p->listen; struct bgp_socket *bs = req->sock; - if (bs) + if (enlisted(&req->n)) { - req->sock = NULL; + /* Remove listen request from listen socket or pending list */ rem_node(&req->n); - if (bs && EMPTY_LIST(bs->requests)) - ev_send(&global_event_list, &bgp_listen_event); + if (bs) + { + /* Already had a socket. */ + req->sock = NULL; + + /* Request listen socket cleanup */ + if (bs && EMPTY_LIST(bs->requests)) + ev_send(&global_event_list, &bgp_listen_event); + } } UNLOCK_DOMAIN(rtable, bgp_listen_domain);