mirror of
https://git.proxmox.com/git/mirror_frr
synced 2025-08-04 23:42:27 +00:00
lib: fix order of northbound callbacks
When ordering the NB callbacks according to their priorities, if the operation is "destroy" we should reverse the order, to destroy the dependants before the dependencies. This fixes the crash, that can be reproduced with the following steps: ``` frr# conf term file-lock frr(config)# affinity-map map bit-position 10 frr(config)# interface test frr(config-if)# link-params frr(config-link-params)# affinity map frr(config-link-params)# exit frr(config-if)# exit frr(config)# mgmt commit apply frr(config)# no affinity-map map frr(config)# interface test frr(config-if)# link-params frr(config-link-params)# no affinity map frr(config-link-params)# exit frr(config-if)# exit frr(config)# mgmt commit apply ``` Signed-off-by: Igor Ryzhov <iryzhov@nfware.com>
This commit is contained in:
parent
323caf1d70
commit
01f371a677
@ -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.
|
||||
|
Loading…
Reference in New Issue
Block a user