summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/affinitymap_northbound.c3
-rw-r--r--lib/northbound.c9
2 files changed, 8 insertions, 4 deletions
diff --git a/lib/affinitymap_northbound.c b/lib/affinitymap_northbound.c
index 8e84d36f2f..003e0c11b9 100644
--- a/lib/affinitymap_northbound.c
+++ b/lib/affinitymap_northbound.c
@@ -94,7 +94,8 @@ const struct frr_yang_module_info frr_affinity_map_info = {
.cbs = {
.create = lib_affinity_map_create,
.destroy = lib_affinity_map_destroy,
- }
+ },
+ .priority = NB_DFLT_PRIORITY - 1,
},
{
.xpath = "/frr-affinity-map:lib/affinity-maps/affinity-map/value",
diff --git a/lib/northbound.c b/lib/northbound.c
index a3d91e56af..6b31b818c5 100644
--- a/lib/northbound.c
+++ b/lib/northbound.c
@@ -391,11 +391,14 @@ void nb_config_replace(struct nb_config *config_dst,
static inline int nb_config_cb_compare(const struct nb_config_cb *a,
const struct nb_config_cb *b)
{
- /* Sort by priority first. */
+ /*
+ * Sort by priority first. If the operation is "destroy", reverse the
+ * order, so that the dependencies are destroyed before the dependants.
+ */
if (a->nb_node->priority < b->nb_node->priority)
- return -1;
+ return a->operation != NB_CB_DESTROY ? -1 : 1;
if (a->nb_node->priority > b->nb_node->priority)
- return 1;
+ return a->operation != NB_CB_DESTROY ? 1 : -1;
/*
* Preserve the order of the configuration changes as told by libyang.