DECLARE_SORTLIST_UNIQ(bmp_listeners, struct bmp_listener, bli,
bmp_listener_cmp);
+static void bmp_listener_put(struct bmp_listener *bl)
+{
+ bmp_listeners_del(&bl->targets->listeners, bl);
+ XFREE(MTYPE_BMP_LISTENER, bl);
+}
+
static int bmp_targets_cmp(const struct bmp_targets *a,
const struct bmp_targets *b)
{
static void bmp_bgp_put(struct bmp_bgp *bmpbgp)
{
struct bmp_targets *bt;
+ struct bmp_listener *bl;
bmp_bgph_del(&bmp_bgph, bmpbgp);
- frr_each_safe(bmp_targets, &bmpbgp->targets, bt)
+ frr_each_safe (bmp_targets, &bmpbgp->targets, bt) {
+ frr_each_safe (bmp_listeners, &bt->listeners, bl)
+ bmp_listener_put(bl);
+
bmp_targets_put(bt);
+ }
bmp_mirrorq_fini(&bmpbgp->mirrorq);
XFREE(MTYPE_BMP, bmpbgp);
return bl;
}
-static void bmp_listener_put(struct bmp_listener *bl)
-{
- bmp_listeners_del(&bl->targets->listeners, bl);
- XFREE(MTYPE_BMP_LISTENER, bl);
-}
-
static void bmp_listener_start(struct bmp_listener *bl)
{
int sock, ret;