summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/if_rmap.c2
-rw-r--r--lib/link_state.c14
-rw-r--r--zebra/zebra_dplane.c5
3 files changed, 20 insertions, 1 deletions
diff --git a/lib/if_rmap.c b/lib/if_rmap.c
index 75bb26c09c..af26c7472c 100644
--- a/lib/if_rmap.c
+++ b/lib/if_rmap.c
@@ -299,7 +299,7 @@ void if_rmap_ctx_delete(struct if_rmap_ctx *ctx)
listnode_delete(if_rmap_ctx_list, ctx);
hash_clean(ctx->ifrmaphash, (void (*)(void *))if_rmap_free);
if (ctx->name)
- XFREE(MTYPE_IF_RMAP_CTX_NAME, ctx);
+ XFREE(MTYPE_IF_RMAP_CTX_NAME, ctx->name);
XFREE(MTYPE_IF_RMAP_CTX, ctx);
}
diff --git a/lib/link_state.c b/lib/link_state.c
index 1b79c79216..3771572adf 100644
--- a/lib/link_state.c
+++ b/lib/link_state.c
@@ -1888,6 +1888,20 @@ void ls_delete_msg(struct ls_message *msg)
if (msg == NULL)
return;
+ if (msg->event == LS_MSG_EVENT_DELETE) {
+ switch (msg->type) {
+ case LS_MSG_TYPE_NODE:
+ ls_node_del(msg->data.node);
+ break;
+ case LS_MSG_TYPE_ATTRIBUTES:
+ ls_attributes_del(msg->data.attr);
+ break;
+ case LS_MSG_TYPE_PREFIX:
+ ls_prefix_del(msg->data.prefix);
+ break;
+ }
+ }
+
XFREE(MTYPE_LS_DB, msg);
}
diff --git a/zebra/zebra_dplane.c b/zebra/zebra_dplane.c
index 6341358afa..f6f436f39f 100644
--- a/zebra/zebra_dplane.c
+++ b/zebra/zebra_dplane.c
@@ -3745,6 +3745,11 @@ dplane_route_update_internal(struct route_node *rn,
NEXTHOP_FLAG_FIB);
}
+ if ((op == DPLANE_OP_ROUTE_UPDATE) && old_re && re &&
+ (old_re != re) &&
+ !CHECK_FLAG(re->status, ROUTE_ENTRY_INSTALLED))
+ SET_FLAG(re->status, ROUTE_ENTRY_INSTALLED);
+
dplane_ctx_free(&ctx);
return ZEBRA_DPLANE_REQUEST_SUCCESS;
}