summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorRafael Zalamena <rzalamena@opensourcerouting.org>2024-01-11 17:12:44 -0300
committerRafael Zalamena <rzalamena@opensourcerouting.org>2025-01-23 14:37:09 -0300
commitdfdc12e1647341bd2402986c5753102ee2bbe4ab (patch)
treedb01163693c509475b50f393eec25f33ebc71ef3 /lib
parent44c6bbeadb54efc2fe825529c800a2f7992a62ea (diff)
lib: abstract instance redistribution management
Use the linked list `del` callback to free memory instead of manually calling. Signed-off-by: Rafael Zalamena <rzalamena@opensourcerouting.org>
Diffstat (limited to 'lib')
-rw-r--r--lib/zclient.c17
1 files changed, 10 insertions, 7 deletions
diff --git a/lib/zclient.c b/lib/zclient.c
index 063944fd3b..6aebe4377e 100644
--- a/lib/zclient.c
+++ b/lib/zclient.c
@@ -104,6 +104,11 @@ void zclient_free(struct zclient *zclient)
XFREE(MTYPE_ZCLIENT, zclient);
}
+static void redist_free_instance(void *data)
+{
+ XFREE(MTYPE_REDIST_INST, data);
+}
+
unsigned short *redist_check_instance(struct redist_proto *red,
unsigned short instance)
{
@@ -126,8 +131,10 @@ void redist_add_instance(struct redist_proto *red, unsigned short instance)
red->enabled = 1;
- if (!red->instances)
+ if (!red->instances) {
red->instances = list_new();
+ red->instances->del = redist_free_instance;
+ }
in = XMALLOC(MTYPE_REDIST_INST, sizeof(unsigned short));
*in = instance;
@@ -143,7 +150,7 @@ void redist_del_instance(struct redist_proto *red, unsigned short instance)
return;
listnode_delete(red->instances, id);
- XFREE(MTYPE_REDIST_INST, id);
+ red->instances->del(id);
if (!red->instances->count) {
red->enabled = 0;
list_delete(&red->instances);
@@ -152,14 +159,10 @@ void redist_del_instance(struct redist_proto *red, unsigned short instance)
void redist_del_all_instances(struct redist_proto *red)
{
- struct listnode *ln, *nn;
- unsigned short *id;
-
if (!red->instances)
return;
- for (ALL_LIST_ELEMENTS(red->instances, ln, nn, id))
- redist_del_instance(red, *id);
+ list_delete(&red->instances);
}
/* Stop zebra client services. */