[collectd] collectd / unixsock memory leak: bug + patch
    Ben Knight 
    bkk at nerdboy.net.au
       
    Mon Nov 30 01:58:10 CET 2009
    
    
  
Hello all
I've tried to log this as a bug ticket in Mantis, but it seemed to have 
problems allowing me to register an account.
We've run into a memory leak in collectd, triggered by usage of 'listval' 
via the unixsock plugin.
When making a 'listval' call, utils_cmd_listval.c:handle_listval() calls 
utils_cache.c:uc_get_names() to retrieve a list of active value names from 
the internal cache. uc_get_names() uses realloc() to allocate memory in 
which to store the list, and returns pointers.
handle_listval() does not perform a free() on the returned memory. Each 
time listval is called, some memory is leaked. handle_getval() does not 
suffer from the same problem - a free() is called in that case.
Patch is attached. I don't code C regularly any more, so it may need some 
cleaning before inclusion..
Thanks;
Ben
-------------- next part --------------
Index: src/utils_cmd_listval.c
===================================================================
--- src/utils_cmd_listval.c	(revision 7092)
+++ src/utils_cmd_listval.c	(working copy)
@@ -79,8 +79,14 @@
   print_to_socket (fh, "%i Value%s found\n",
       (int) number, (number == 1) ? "" : "s");
   for (i = 0; i < number; i++)
+  {
     print_to_socket (fh, "%u %s\n", (unsigned int) times[i], names[i]);
+    sfree(names[i]);
+  }
 
+  sfree(names);
+  sfree(times);
+   
   return (0);
 } /* int handle_listval */
 
    
    
More information about the collectd
mailing list