OVS code provides useful functionality svec, which deals with dynamical
vector of strings. This module already provides functionality for adding, 
removing, modifying... strings in this vector. While working on reducing memory
leaks in OVN code I found ovs_cmdl_env_parse_all() function, which allocates
array of strings with the help of svec. Resulting array represents memory
leak (both in ovn-nctl and ovn-sctl) code, however since it is detached for 
svec entity apparent functionality for releasing this memory could not be used.

Instead of assigning allocated memory back to svec (with a purpose to 
deallocate it
with appropriate function) I was looking for yet another function in OVS which 
would 
do the same. Since I didn't find it I am proposing the following function. 
I think the most apropriate location would be in util.c module, however if 
someone
could advice for some other possibility I would be thankful.



Signed-off-by: Damijan Skvarc <[email protected]>
---
 lib/util.c | 13 +++++++++++++
 lib/util.h |  1 +
 2 files changed, 14 insertions(+)

diff --git a/lib/util.c b/lib/util.c
index 830e145..a588c8e 100644
--- a/lib/util.c
+++ b/lib/util.c
@@ -346,6 +346,19 @@ xasprintf(const char *format, ...)
     return s;
 }
 
+/* free array of char pointers and array itself */
+void
+xstrsfree(char **strs, size_t size)
+{
+    size_t i;
+
+    for (i = 0; i < size; i++) {
+        free(strs[i]);
+    }
+    free(strs);
+}
+
+
 /* Similar to strlcpy() from OpenBSD, but it never reads more than 'size - 1'
  * bytes from 'src' and doesn't return anything. */
 void
diff --git a/lib/util.h b/lib/util.h
index 7ad8758..284973a 100644
--- a/lib/util.h
+++ b/lib/util.h
@@ -159,6 +159,7 @@ bool nullable_string_is_equal(const char *a, const char *b);
 char *xasprintf(const char *format, ...) OVS_PRINTF_FORMAT(1, 2) MALLOC_LIKE;
 char *xvasprintf(const char *format, va_list) OVS_PRINTF_FORMAT(1, 0) 
MALLOC_LIKE;
 void *x2nrealloc(void *p, size_t *n, size_t s);
+void  xstrsfree(char **, size_t);
 
 void *xmalloc_cacheline(size_t) MALLOC_LIKE;
 void *xzalloc_cacheline(size_t) MALLOC_LIKE;
-- 
2.7.4

_______________________________________________
dev mailing list
[email protected]
https://mail.openvswitch.org/mailman/listinfo/ovs-dev

Reply via email to