summaryrefslogtreecommitdiff
path: root/ospfd/ospf_apiserver.c
diff options
context:
space:
mode:
authorDonald Sharp <sharpd@nvidia.com>2023-03-18 15:35:34 -0400
committerMergify <37929162+mergify[bot]@users.noreply.github.com>2023-03-19 04:29:22 +0000
commit89992e547c92a4f68f3c7abc07fcb39ad6c4a74b (patch)
treef592db5f306309d4439f5e9dccaef981e3c5a666 /ospfd/ospf_apiserver.c
parente4aa127939ba07082be2a11eb6f13b2ffdc4a770 (diff)
ospfd: Cleanup some memory leaks on shutdown in ospf_apiserver.c
Clean up some memory leaks found in ospf_apiserver.c Also a crash in the original implementation. Signed-off-by: Donald Sharp <sharpd@nvidia.com> (cherry picked from commit 7773d0071ab4eb1b725581c525c3e152f2c806c7)
Diffstat (limited to 'ospfd/ospf_apiserver.c')
-rw-r--r--ospfd/ospf_apiserver.c13
1 files changed, 11 insertions, 2 deletions
diff --git a/ospfd/ospf_apiserver.c b/ospfd/ospf_apiserver.c
index ee29ed8aae..6415fda1fc 100644
--- a/ospfd/ospf_apiserver.c
+++ b/ospfd/ospf_apiserver.c
@@ -181,9 +181,14 @@ void ospf_apiserver_term(void)
* Free all client instances. ospf_apiserver_free removes the node
* from the list, so we examine the head of the list anew each time.
*/
- while (apiserver_list
- && (apiserv = listgetdata(listhead(apiserver_list))) != NULL)
+ if (!apiserver_list)
+ return;
+
+ while (listcount(apiserver_list)) {
+ apiserv = listgetdata(listhead(apiserver_list));
+
ospf_apiserver_free(apiserv);
+ }
/* Free client list itself */
if (apiserver_list)
@@ -338,6 +343,7 @@ void ospf_apiserver_free(struct ospf_apiserver *apiserv)
ospf_apiserver_unregister_opaque_type(
apiserv, regtype->lsa_type, regtype->opaque_type);
}
+ list_delete(&apiserv->opaque_types);
/* Close connections to OSPFd. */
if (apiserv->fd_sync > 0) {
@@ -359,6 +365,8 @@ void ospf_apiserver_free(struct ospf_apiserver *apiserv)
/* Remove from the list of active clients. */
listnode_delete(apiserver_list, apiserv);
+ XFREE(MTYPE_APISERVER_MSGFILTER, apiserv->filter);
+
if (IS_DEBUG_OSPF_EVENT)
zlog_debug("API: Delete apiserv(%p), total#(%d)",
(void *)apiserv, apiserver_list->count);
@@ -904,6 +912,7 @@ int ospf_apiserver_unregister_opaque_type(struct ospf_apiserver *apiserv,
/* Remove from list of registered opaque types */
listnode_delete(apiserv->opaque_types, regtype);
+ XFREE(MTYPE_APISERVER, regtype);
if (IS_DEBUG_OSPF_EVENT)
zlog_debug(
"API: Del LSA-type(%d)/Opaque-type(%d) from apiserv(%p), total#(%d)",