Re: nlif_open() - nlif_close() - memory leak?

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hello,

On Thursday, 2008 May 22 at 15:00:35 +0500, Anton wrote:
> 
> > The attached patch should fix the memory leak issue.
> > Could you test it ?
> 
> Accordingly to "top", it's still leaking.

Yes, I should not code during conferences ;)

I attach a patch which is working for me.

BR,
-- 
Eric Leblond
INL: http://www.inl.fr/
NuFW: http://www.nufw.org/
diff --git a/src/iftable.c b/src/iftable.c
index 7e6172b..01ccc8c 100644
--- a/src/iftable.c
+++ b/src/iftable.c
@@ -25,6 +25,8 @@
 
 #define iftb_log(x, ...)
 
+#define SIZE_IFHASH 16
+
 struct ifindex_map {
 	struct ifindex_map *next;
 
@@ -37,7 +39,7 @@ struct ifindex_map {
 };
 
 struct nlif_handle {
-	struct ifindex_map *ifindex_map[16];
+	struct ifindex_map *ifindex_map[SIZE_IFHASH];
 	struct rtnl_handle *rtnl_handle;
 	struct rtnl_handler ifadd_handler;
 	struct rtnl_handler ifdel_handler;
@@ -222,6 +224,7 @@ static int iftable_up(struct nlif_handle *nlif_handle, unsigned int index)
 struct nlif_handle *nlif_open(void)
 {
 	struct nlif_handle *h;
+	int i;
 
 	h = calloc(1,  sizeof(struct nlif_handle));
 	if (h == NULL)
@@ -255,6 +258,21 @@ err:
 	return NULL;
 }
 
+static void free_indexmap(struct ifindex_map **indexmap)
+{
+	struct ifindex_map *ima, *imp;
+	int i;
+
+	for (i = 0; i < SIZE_IFHASH; i++) {
+		for (ima = indexmap[i]; ima != NULL; ima = imp) {
+			if (ima) {
+				imp = ima->next;
+				free(ima);
+			}
+		}
+	}
+}
+
 /** Destructor of interface table
  *
  * \param nlif_handle A pointer to a ::nlif_handle created 
@@ -267,6 +285,7 @@ void nlif_close(struct nlif_handle *h)
 	rtnl_handler_unregister(h->rtnl_handle, &h->ifadd_handler);
 	rtnl_handler_unregister(h->rtnl_handle, &h->ifdel_handler);
 	rtnl_close(h->rtnl_handle);
+	free_indexmap(h->ifindex_map);
 	free(h);
 	h = NULL; /* bugtrap */
 }

Attachment: signature.asc
Description: Digital signature


[Index of Archives]     [Netfitler Users]     [LARTC]     [Bugtraq]     [Yosemite Forum]

  Powered by Linux