]> git.ipfire.org Git - thirdparty/bird.git/commitdiff
BGP: fix listen socket cleanup
authorMaria Matejka <mq@ucw.cz>
Mon, 8 May 2023 16:57:32 +0000 (18:57 +0200)
committerMaria Matejka <mq@ucw.cz>
Thu, 11 May 2023 09:41:01 +0000 (11:41 +0200)
proto/bgp/bgp.c

index e2a0d7df5d293ecb6763e5d1d7ff2c5275bd595a..c98f84ab68e8da00bfaaed18dc5465f5fe0e4075 100644 (file)
@@ -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);