summaryrefslogtreecommitdiff
path: root/lib/flex_algo.c
diff options
context:
space:
mode:
Diffstat (limited to 'lib/flex_algo.c')
-rw-r--r--lib/flex_algo.c22
1 files changed, 14 insertions, 8 deletions
diff --git a/lib/flex_algo.c b/lib/flex_algo.c
index 612bfbc8cf..b363b5f277 100644
--- a/lib/flex_algo.c
+++ b/lib/flex_algo.c
@@ -48,6 +48,19 @@ struct flex_algo *flex_algo_alloc(struct flex_algos *flex_algos,
return fa;
}
+static void _flex_algo_delete(struct flex_algos *flex_algos,
+ struct flex_algo *fa)
+{
+ if (flex_algos->releaser)
+ flex_algos->releaser(fa->data);
+ admin_group_term(&fa->admin_group_exclude_any);
+ admin_group_term(&fa->admin_group_include_any);
+ admin_group_term(&fa->admin_group_include_all);
+ listnode_delete(flex_algos->flex_algos, fa);
+ XFREE(MTYPE_FLEX_ALGO, fa);
+}
+
+
void flex_algo_delete(struct flex_algos *flex_algos, uint8_t algorithm)
{
struct listnode *node, *nnode;
@@ -56,14 +69,7 @@ void flex_algo_delete(struct flex_algos *flex_algos, uint8_t algorithm)
for (ALL_LIST_ELEMENTS(flex_algos->flex_algos, node, nnode, fa)) {
if (fa->algorithm != algorithm)
continue;
- if (flex_algos->releaser)
- flex_algos->releaser(fa->data);
- admin_group_term(&fa->admin_group_exclude_any);
- admin_group_term(&fa->admin_group_include_any);
- admin_group_term(&fa->admin_group_include_all);
- listnode_delete(flex_algos->flex_algos, fa);
- XFREE(MTYPE_FLEX_ALGO, fa);
- return;
+ _flex_algo_delete(flex_algos, fa);
}
}