<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML><HEAD>
<META http-equiv=Content-Type content="text/html; charset=us-ascii">
<META content="MSHTML 6.00.6002.18591" name=GENERATOR></HEAD>
<BODY>
<DIV dir=ltr align=left><SPAN class=609501520-30052012><FONT face=Arial 
color=#0000ff size=2>Hi Dave</FONT></SPAN></DIV>
<DIV dir=ltr align=left><SPAN class=609501520-30052012><FONT face=Arial 
color=#0000ff size=2></FONT></SPAN> </DIV>
<DIV dir=ltr align=left><SPAN class=609501520-30052012><FONT face=Arial 
color=#0000ff size=2>Yay, so I've found some leaks and prepared a diff!  
I've also included misc. other fixes and one cool feature.  I'm still 
working on 4.10.2 so the patches might not work or still be applicable to 5.x, 
but last time I checked at least some of the issues I fixed were not fixed in 
5.x.  I assume you guys will review and manually merge into 5.x and/or 
4.10.x.  I'd be happy to provide more info and answer questions if anything 
I've done is not clear.</FONT></SPAN></DIV>
<DIV dir=ltr align=left><SPAN class=609501520-30052012><FONT face=Arial 
color=#0000ff size=2></FONT></SPAN> </DIV>
<DIV dir=ltr align=left><SPAN class=609501520-30052012><FONT face=Arial 
color=#0000ff size=2>Quick overview:</FONT></SPAN></DIV>
<DIV dir=ltr align=left><SPAN class=609501520-30052012><FONT face=Arial 
color=#0000ff size=2><SPAN class=609501520-30052012><FONT face=Arial 
color=#0000ff size=2>    Fixed various collectd memory leaks.<BR>
<DIV dir=ltr align=left><SPAN class=609501520-30052012><FONT face=Arial 
color=#0000ff size=2>    Fixed collectd's unixsock read 
interrupted by SIGCHLD's.</FONT></SPAN></DIV>
<DIV dir=ltr align=left><SPAN class=609501520-30052012>
<DIV dir=ltr align=left><SPAN class=609501520-30052012><FONT face=Arial 
color=#0000ff size=2>    Fixed collectd exec module: 
incorrectly exited select loop on 
signal.</FONT></SPAN></DIV></SPAN></DIV></FONT></SPAN></FONT></SPAN></DIV>
<DIV dir=ltr align=left><SPAN class=609501520-30052012><FONT face=Arial 
color=#0000ff size=2><SPAN class=609501520-30052012><FONT face=Arial 
color=#0000ff size=2>
<DIV dir=ltr align=left><SPAN class=609501520-30052012><FONT face=Arial 
color=#0000ff size=2>    Fixed incorrect collectd warning 
when configuring network plugin.</FONT></SPAN></DIV>
<DIV dir=ltr align=left><SPAN class=609501520-30052012>
<DIV dir=ltr align=left><SPAN class=609501520-30052012><FONT face=Arial 
color=#0000ff size=2>    Collectd's scale plugin now supports 
scaling only on specific data sources, yay!  (New 
feature)</FONT></SPAN></DIV>
<DIV dir=ltr align=left><SPAN class=609501520-30052012></SPAN> </DIV>
<DIV dir=ltr align=left><SPAN class=609501520-30052012>Apologies if I wasn't 
supposed to paste the patch in the body of the email, but here 
goes:</SPAN></DIV>
<DIV dir=ltr align=left><SPAN class=609501520-30052012></SPAN> </DIV>
<DIV dir=ltr align=left><SPAN 
class=609501520-30052012></SPAN> </DIV></SPAN></DIV></DIV></FONT></SPAN></FONT></SPAN>
<DIV dir=ltr align=left><SPAN class=609501520-30052012><FONT face=Arial 
color=#0000ff size=2>commit ba04be9feeec4f40b9ada1cae64c0a27634f1c76<BR>Author: 
Gerrie Roos <<A 
href="mailto:groos@xiplink.com">groos@xiplink.com</A>><BR>Date:   
Fri May 25 05:38:47 2012 +0200</FONT></SPAN></DIV>
<DIV><FONT face=Arial color=#0000ff size=2></FONT> </DIV>
<DIV dir=ltr align=left><SPAN class=609501520-30052012><FONT face=Arial 
color=#0000ff size=2>    Fixed various collectd memory 
leaks.<BR>    <BR>    Once I understood what's 
going on I tried to keep the changes to a minimum.<BR></FONT></SPAN><FONT 
face=Arial color=#0000ff size=2></FONT></DIV>
<DIV dir=ltr align=left><SPAN class=609501520-30052012><FONT face=Arial 
color=#0000ff size=2>diff --git a/src/collectd.c b/src/collectd.c<BR>index 
277d3b0..f5df460 100644<BR>--- a/src/collectd.c<BR>+++ b/src/collectd.c<BR>@@ 
-77,6 +77,7 @@ static void sig_usr1_handler (int __attribute__((unused)) 
signal)<BR>  pthread_attr_init 
(&attr);<BR>  pthread_attr_setdetachstate (&attr, 
PTHREAD_CREATE_DETACHED);<BR>  pthread_create (&thread, &attr, 
do_flush, NULL);<BR>+ pthread_attr_destroy 
(&attr);<BR> }<BR> <BR> static int init_hostname 
(void)<BR>diff --git a/src/exec.c b/src/exec.c<BR>index 322ff67..265ec01 
100644<BR>--- a/src/exec.c<BR>+++ b/src/exec.c<BR>@@ -827,6 +827,7 @@ static int 
exec_read (void) /* {{{ */<BR>     pthread_attr_init 
(&attr);<BR>     pthread_attr_setdetachstate (&attr, 
PTHREAD_CREATE_DETACHED);<BR>     pthread_create (&t, 
&attr, exec_read_one, (void *) pl);<BR>+    
pthread_attr_destroy(&attr);<BR>   } /* for (pl) 
*/<BR> <BR>   return (0);<BR>@@ -870,6 +871,7 @@ static int 
exec_notification (const notification_t *n, /* {{{ 
*/<BR>     pthread_attr_init 
(&attr);<BR>     pthread_attr_setdetachstate (&attr, 
PTHREAD_CREATE_DETACHED);<BR>     pthread_create (&t, 
&attr, exec_notification_one, (void *) pln);<BR>+    
pthread_attr_destroy (&attr);<BR>   } /* for (pl) 
*/<BR> <BR>   return (0);<BR>diff --git a/src/meta_data.c 
b/src/meta_data.c<BR>index 6a336c4..9307e5e 100644<BR>--- 
a/src/meta_data.c<BR>+++ b/src/meta_data.c<BR>@@ -214,6 +214,7 @@ void 
meta_data_destroy (meta_data_t *md) /* {{{ */<BR>   if (md == 
NULL)<BR>     return;<BR> <BR>+  
pthread_mutex_destroy(&md->lock);<BR>   md_entry_free 
(md->head);<BR>   free (md);<BR> } /* }}} void 
meta_data_destroy */<BR>diff --git a/src/unixsock.c b/src/unixsock.c<BR>index 
1010b59..dea8be0 100644<BR>--- a/src/unixsock.c<BR>+++ b/src/unixsock.c<BR>@@ 
-187,6 +187,7 @@ static void *us_handle_client (void 
*arg)<BR>   close (fdin);<BR>   close 
(fdout);<BR>   pthread_exit ((void *) 1);<BR>+  return 
((void *) 0);<BR>  }<BR> <BR>  fhout = fdopen (fdout, 
"w");<BR>@@ -198,6 +199,7 @@ static void *us_handle_client (void 
*arg)<BR>   fclose (fhin); /* this closes fdin as well 
*/<BR>   close (fdout);<BR>   pthread_exit ((void 
*) 1);<BR>+  return ((void *) 
0);<BR>  }<BR> <BR>  /* change output buffer to line 
buffered mode */<BR>@@ -209,6 +211,7 @@ static void *us_handle_client (void 
*arg)<BR>   fclose (fhin);<BR>   fclose 
(fhout);<BR>   pthread_exit ((void *) 1);<BR>+  return 
((void *) 0);<BR>  }<BR> <BR>  while (42)<BR>@@ -253,6 
+256,7 @@ static void *us_handle_client (void 
*arg)<BR>    fclose 
(fhin);<BR>    fclose 
(fhout);<BR>    pthread_exit ((void *) 
1);<BR>+   return ((void *) 
0);<BR>   }<BR> <BR>   if (strcasecmp 
(fields[0], "getval") == 0)<BR>@@ -307,9 +311,13 @@ static void 
*us_server_thread (void __attribute__((unused)) *arg)<BR>  pthread_t 
th;<BR>  pthread_attr_t th_attr;<BR> <BR>+ pthread_attr_init 
(&th_attr);<BR>+ pthread_attr_setdetachstate (&th_attr, 
PTHREAD_CREATE_DETACHED);<BR>+<BR>  if (us_open_socket () != 
0)<BR>   pthread_exit ((void *) 
1);<BR> <BR>+<BR>  while (loop != 
0)<BR>  {<BR>   DEBUG ("unixsock plugin: Calling 
accept..");<BR>@@ -325,6 +333,7 @@ static void *us_server_thread (void 
__attribute__((unused)) *arg)<BR>      sstrerror 
(errno, errbuf, sizeof (errbuf)));<BR>    close 
(sock_fd);<BR>    sock_fd = 
-1;<BR>+   pthread_attr_destroy(&th_attr);<BR>    pthread_exit 
((void *) 1);<BR>   }<BR> <BR>@@ -341,9 +350,6 @@ static 
void *us_server_thread (void __attribute__((unused)) 
*arg)<BR> <BR>   DEBUG ("Spawning child to handle connection 
on fd #%i", *remote_fd);<BR> <BR>-  pthread_attr_init 
(&th_attr);<BR>-  pthread_attr_setdetachstate (&th_attr, 
PTHREAD_CREATE_DETACHED);<BR>-<BR>   status = pthread_create 
(&th, &th_attr, us_handle_client, (void *) 
remote_fd);<BR>   if (status != 0)<BR>   {<BR>@@ 
-358,6 +364,7 @@ static void *us_server_thread (void __attribute__((unused)) 
*arg)<BR> <BR>  close (sock_fd);<BR>  sock_fd = 
-1;<BR>+ pthread_attr_destroy(&th_attr);<BR> <BR>  status 
= unlink ((sock_file != NULL) ? sock_file : US_DEFAULT_PATH);<BR>  if 
(status != 0)<BR>diff --git a/src/utils_cmd_listval.c 
b/src/utils_cmd_listval.c<BR>index 4ca9646..f923fca 100644<BR>--- 
a/src/utils_cmd_listval.c<BR>+++ b/src/utils_cmd_listval.c<BR>@@ -89,8 +89,9 @@ 
int handle_listval (FILE *fh, char *buffer)<BR> <BR>   
print_to_socket (fh, "%i Value%s 
found\n",<BR>       (int) number, (number == 1) ? 
"" : "s");<BR>-  for (i = 0; i < number; i++)<BR>+  for (i = 0; i 
< number; i++) {<BR>     print_to_socket (fh, "%u %s\n", 
(unsigned int) times[i], names[i]);<BR>+  }<BR> <BR>   
free_everything_and_return (0);<BR> } /* int handle_listval */<BR>diff 
--git a/src/utils_fbhash.c b/src/utils_fbhash.c<BR>index d20b7e3..9f1058b 
100644<BR>--- a/src/utils_fbhash.c<BR>+++ b/src/utils_fbhash.c<BR>@@ -234,6 
+234,7 @@ void fbh_destroy (fbhash_t *h) /* {{{ */<BR>   if (h == 
NULL)<BR>     return;<BR> <BR>+  
pthread_mutex_destroy(&h->lock);<BR>   free 
(h->filename);<BR>   fbh_free_tree (h->tree);<BR> } /* }}} 
void fbh_destroy */</FONT></SPAN></DIV>
<DIV> </DIV>
<DIV dir=ltr align=left><SPAN class=609501520-30052012><FONT face=Arial 
color=#0000ff size=2>commit 402e0a1746a67e47619ffc4ce2ad6317e8884cfe<BR>Author: 
Gerrie Roos <<A 
href="mailto:groos@xiplink.com">groos@xiplink.com</A>><BR>Date:   
Tue Apr 17 15:22:36 2012 +0200</FONT></SPAN></DIV>
<DIV><FONT face=Arial color=#0000ff size=2></FONT> </DIV>
<DIV dir=ltr align=left><SPAN class=609501520-30052012><FONT face=Arial 
color=#0000ff size=2>    Fixed collectd's unixsock read 
interrupted by SIGCHLD's.</FONT></SPAN></DIV>
<DIV><FONT face=Arial color=#0000ff size=2></FONT> </DIV>
<DIV dir=ltr align=left><SPAN class=609501520-30052012><FONT face=Arial 
color=#0000ff size=2>diff --git a/src/unixsock.c b/src/unixsock.c<BR>index 
0b89748..1010b59 100644<BR>--- a/src/unixsock.c<BR>+++ b/src/unixsock.c<BR>@@ 
-222,6 +222,9 @@ static void *us_handle_client (void 
*arg)<BR>   errno = 0;<BR>   if (fgets (buffer, 
sizeof (buffer), fhin) == NULL)<BR>   {<BR>+   if 
(errno == 
EINTR)<BR>+    continue;<BR>+<BR>    if 
(errno != 0)<BR>    {<BR>     char 
errbuf[1024];</FONT></SPAN></DIV>
<DIV><FONT face=Arial color=#0000ff size=2></FONT> </DIV>
<DIV dir=ltr align=left><SPAN class=609501520-30052012><FONT face=Arial 
color=#0000ff size=2>commit 9f4c960f94bc70d680400b50a84655f288e7e96d<BR>Author: 
Gerrie Roos <<A 
href="mailto:groos@xiplink.com">groos@xiplink.com</A>><BR>Date:   
Tue Jan 10 09:00:42 2012 +0200</FONT></SPAN></DIV>
<DIV><FONT face=Arial color=#0000ff size=2></FONT> </DIV>
<DIV dir=ltr align=left><SPAN class=609501520-30052012><FONT face=Arial 
color=#0000ff size=2>    Fixed collectd exec module: 
incorrectly exited select loop on signal.</FONT></SPAN></DIV>
<DIV> </DIV>
<DIV dir=ltr align=left><SPAN class=609501520-30052012><FONT face=Arial 
color=#0000ff size=2>diff --git a/src/exec.c b/src/exec.c<BR>index 
c64f949..322ff67 100644<BR>--- a/src/exec.c<BR>+++ b/src/exec.c<BR>@@ -584,8 
+584,15 @@ static void *exec_read_one (void *arg) /* {{{ */<BR>   /* 
We use a copy of fdset, as select modifies it */<BR>   copy = 
fdset;<BR> <BR>-  while (select(highest_fd + 1, &copy, NULL, NULL, 
NULL ) > 0)<BR>+  while (1)<BR>   {<BR>+    int 
e = select(highest_fd + 1, &copy, NULL, NULL, NULL );<BR>+    
if (e < 0) {<BR>+      if (errno == 
EINTR)<BR>+ continue;<BR>+      
break;<BR>+    }<BR>+<BR>     int 
len;<BR> <BR>     if (FD_ISSET(fd, 
&copy))</FONT></SPAN></DIV>
<DIV><FONT face=Arial color=#0000ff size=2></FONT> </DIV>
<DIV dir=ltr align=left><SPAN class=609501520-30052012><FONT face=Arial 
color=#0000ff size=2>commit 27dd489e1242af63d2df04dfe627c440512e8da1<BR>Author: 
Gerrie Roos <<A 
href="mailto:groos@xiplink.com">groos@xiplink.com</A>><BR>Date:   
Tue Dec 20 06:30:59 2011 +0200</FONT></SPAN></DIV>
<DIV><FONT face=Arial color=#0000ff size=2></FONT> </DIV>
<DIV dir=ltr align=left><SPAN class=609501520-30052012><FONT face=Arial 
color=#0000ff size=2>    Fixed incorrect collectd warning 
when configuring network plugin.</FONT></SPAN></DIV>
<DIV><FONT face=Arial color=#0000ff size=2></FONT> </DIV>
<DIV dir=ltr align=left><SPAN class=609501520-30052012><FONT face=Arial 
color=#0000ff size=2>diff --git a/src/network.c b/src/network.c<BR>index 
412b457..aa1c858 100644<BR>--- a/src/network.c<BR>+++ b/src/network.c<BR>@@ 
-1685,9 +1685,9 @@ static int network_set_interface (const sockent_t *se, const 
struct addrinfo *ai<BR>  }<BR> <BR>  /* else: Not a 
multicast interface. */<BR>-#if defined(HAVE_IF_INDEXTONAME) && 
HAVE_IF_INDEXTONAME && defined(SO_BINDTODEVICE)<BR>  if 
(se->interface != 0)<BR>  {<BR>+#if defined(HAVE_IF_INDEXTONAME) 
&& HAVE_IF_INDEXTONAME && 
defined(SO_BINDTODEVICE)<BR>   char 
interface_name[IFNAMSIZ];<BR> <BR>   if (if_indextoname 
(se->interface, interface_name) == NULL)<BR>@@ -1704,11 +1704,10 @@ static 
int network_set_interface (const sockent_t *se, const struct addrinfo 
*ai<BR>      sstrerror (errno, errbuf, sizeof 
(errbuf)));<BR>    return 
(-1);<BR>   }<BR>- }<BR> /* #endif HAVE_IF_INDEXTONAME 
&& SO_BINDTODEVICE */<BR> <BR> #else<BR>- WARNING 
("network plugin: Cannot set the interface on a unicast 
"<BR>+  WARNING ("network plugin: Cannot set the interface on a 
unicast "<BR>    "socket because "<BR> # if 
!defined(SO_BINDTODEVICE)<BR>    "the the 
\"SO_BINDTODEVICE\" socket option "<BR>@@ -1718,6 +1717,8 @@ static int 
network_set_interface (const sockent_t *se, const struct addrinfo 
*ai<BR>    "is not available on your 
system.");<BR> #endif<BR> <BR>+ }<BR>+<BR>  return 
(0);<BR> } /* }}} network_set_interface */<BR> <BR>commit 
641dc2dd4c595ede24c3997e4aa9db5c4528a2cd<BR>Author: Gerrie Roos <<A 
href="mailto:groos@xiplink.com">groos@xiplink.com</A>><BR>Date:   
Wed May 25 18:28:55 2011 +0200</FONT></SPAN></DIV>
<DIV><FONT face=Arial color=#0000ff size=2></FONT> </DIV>
<DIV dir=ltr align=left><SPAN class=609501520-30052012><FONT face=Arial 
color=#0000ff size=2>    Collectd's scale plugin now supports 
scaling only on specific data sources, yay!</FONT></SPAN></DIV>
<DIV><FONT face=Arial color=#0000ff size=2></FONT> </DIV>
<DIV dir=ltr align=left><SPAN class=609501520-30052012><FONT face=Arial 
color=#0000ff size=2>diff --git a/src/target_scale.c 
b/src/target_scale.c<BR>index 29fecdf..a8d7038 100644<BR>--- 
a/src/target_scale.c<BR>+++ b/src/target_scale.c<BR>@@ -29,6 +29,9 @@ struct 
ts_data_s<BR> {<BR>  double factor;<BR>  double 
offset;<BR>+<BR>+ char **data_sources;<BR>+ size_t 
data_sources_num;<BR> };<BR> typedef struct ts_data_s 
ts_data_t;<BR> <BR>@@ -300,6 +303,67 @@ static int ts_config_set_double 
(double *ret, oconfig_item_t *ci) /* {{{ */<BR>  return 
(0);<BR> } /* }}} int ts_config_set_double */<BR> <BR>+static int 
ts_config_add_data_source(ts_data_t *data, /* {{{ 
*/<BR>+  oconfig_item_t *ci)<BR>+{<BR>+ size_t 
new_data_sources_num;<BR>+ char **temp;<BR>+ int i;<BR>+<BR>+ /* 
Check number of arbuments. */<BR>+ if (ci->values_num < 
1)<BR>+ {<BR>+  ERROR ("`value' match: `%s' needs at least one 
argument.",<BR>+    ci->key);<BR>+  return 
(-1);<BR>+ }<BR>+<BR>+ /* Check type of arguments */<BR>+ for (i 
= 0; i < ci->values_num; i++)<BR>+ {<BR>+  if 
(ci->values[i].type == 
OCONFIG_TYPE_STRING)<BR>+   continue;<BR>+<BR>+  ERROR 
("`value' match: `%s' accepts only string arguments 
"<BR>+    "(argument %i is a 
%s).",<BR>+    ci->key, i + 
1,<BR>+    (ci->values[i].type == 
OCONFIG_TYPE_BOOLEAN)<BR>+    ? "truth value" : 
"number");<BR>+  return (-1);<BR>+ }<BR>+<BR>+ /* Allocate 
space for the char pointers */<BR>+ new_data_sources_num = 
data->data_sources_num + ((size_t) ci->values_num);<BR>+ temp = (char 
**) realloc (data->data_sources,<BR>+   new_data_sources_num * 
sizeof (char *));<BR>+ if (temp == NULL)<BR>+ {<BR>+  ERROR 
("`value' match: realloc failed.");<BR>+  return 
(-1);<BR>+ }<BR>+ data->data_sources = temp;<BR>+<BR>+ /* Copy 
the strings, allocating memory as needed.  */<BR>+ for (i = 0; i < 
ci->values_num; i++)<BR>+ {<BR>+  size_t 
j;<BR>+<BR>+  /* If we get here, there better be memory for us to 
write to.  */<BR>+  assert (data->data_sources_num < 
new_data_sources_num);<BR>+<BR>+  j = 
data->data_sources_num;<BR>+  data->data_sources[j] = sstrdup 
(ci->values[i].value.string);<BR>+  if (data->data_sources[j] == 
NULL)<BR>+  {<BR>+   ERROR ("`value' match: sstrdup 
failed.");<BR>+   continue;<BR>+  }<BR>+  data->data_sources_num++;<BR>+ }<BR>+<BR>+ return 
(0);<BR>+} /* }}} int ts_config_add_data_source */<BR>+<BR> static int 
ts_destroy (void **user_data) /* {{{ */<BR> {<BR>  ts_data_t 
**data;<BR>@@ -309,6 +373,13 @@ static int ts_destroy (void **user_data) /* {{{ 
*/<BR> <BR>  data = (ts_data_t **) 
user_data;<BR> <BR>+ if (*data && (*data)->data_sources) 
{<BR>+  size_t i;<BR>+  for (i = 0; i < 
(*data)->data_sources_num; 
i++)<BR>+   free((*data)->data_sources[i]);<BR>+  free((*data)->data_sources);<BR>+ }<BR>+<BR>  free 
(*data);<BR>  *data = NULL;<BR> <BR>@@ -341,6 +412,8 @@ static 
int ts_create (const oconfig_item_t *ci, void **user_data) /* {{{ 
*/<BR>     status = ts_config_set_double 
(&data->factor, child);<BR>   else if (strcasecmp 
("Offset", child->key) == 0)<BR>     status = 
ts_config_set_double (&data->offset, child);<BR>+  else if 
(strcasecmp ("DataSource", child->key) == 
0)<BR>+    status = ts_config_add_data_source(data, 
child);<BR>   else<BR>   {<BR>    ERROR 
("Target `scale': The `%s' configuration option is not understood "<BR>@@ -393,6 
+466,18 @@ static int ts_invoke (const data_set_t *ds, value_list_t *vl, /* {{{ 
*/<BR> <BR>  for (i = 0; i < ds->ds_num; 
i++)<BR>  {<BR>+  /* If we've got a list of data sources, is 
it in the list? */<BR>+  if (data->data_sources) 
{<BR>+   size_t j;<BR>+   for (j = 0; j < 
data->data_sources_num; j++)<BR>+    if 
(strcasecmp(ds->ds[i].name, data->data_sources[j]) == 
0)<BR>+     break;<BR>+<BR>+   /* No 
match, ignore */<BR>+   if (j >= 
data->data_sources_num)<BR>+    continue;<BR>+  }<BR>+<BR>   if 
(ds->ds[i].type == 
DS_TYPE_COUNTER)<BR>    ts_invoke_counter (ds, vl, data, 
i);<BR>   else if (ds->ds[i].type == 
DS_TYPE_GAUGE)</FONT></SPAN></DIV>
<DIV><FONT face=Arial color=#0000ff size=2></FONT> </DIV>
<DIV dir=ltr align=left><SPAN class=609501520-30052012><FONT face=Arial 
color=#0000ff size=2> </FONT></SPAN></DIV>
<DIV dir=ltr align=left><SPAN class=609501520-30052012><FONT face=Arial 
color=#0000ff size=2></FONT></SPAN> </DIV>
<DIV dir=ltr align=left><SPAN class=609501520-30052012><FONT face=Arial 
color=#0000ff size=2></FONT></SPAN> </DIV>
<DIV dir=ltr align=left><SPAN class=609501520-30052012><FONT face=Arial 
color=#0000ff size=2>Hope you find this useful,</FONT></SPAN></DIV>
<DIV dir=ltr align=left><SPAN class=609501520-30052012><FONT face=Arial 
color=#0000ff size=2>gerrie</FONT></SPAN></DIV>
<DIV dir=ltr align=left><SPAN class=609501520-30052012><FONT face=Arial 
color=#0000ff size=2></FONT></SPAN> </DIV><BR>
<DIV class=OutlookMessageHeader lang=en-us dir=ltr align=left>
<HR tabIndex=-1>
<FONT face=Tahoma size=2><B>From:</B> David Halko [mailto:davidhalko@gmail.com] 
<BR><B>Sent:</B> 25 May 2012 09:23 PM<BR><B>To:</B> 
groos@xiplink.com<BR><B>Cc:</B> collectd@verplant.org<BR><B>Subject:</B> Re: 
[collectd] Unixsock plugin memleaks<BR></FONT><BR></DIV>
<DIV></DIV>It sounds like a good deal, if you share the changed, <BR>if you have 
fixed some memory leaks!!!<BR><BR>Dave<BR><A 
href="http://netmgt.blogspot.com/">http://netmgt.blogspot.com/</A><BR><BR>
<DIV class=gmail_quote>On Thu, May 24, 2012 at 11:21 AM, Gerrie Roos <SPAN 
dir=ltr><<A href="mailto:groos@xiplink.com" 
target=_blank>groos@xiplink.com</A>></SPAN> wrote:<BR>
<BLOCKQUOTE class=gmail_quote 
style="PADDING-LEFT: 1ex; MARGIN: 0px 0px 0px 0.8ex; BORDER-LEFT: #ccc 1px solid">Hi 
  ppl<BR><BR>I've been chasing some memory leaks in the unixsock plugin (already 
  found a<BR>couple) but there might still be some leaks.  Has anybody been 
  working on<BR>this plugin recently?  I'd be happy to share what I've got 
  so 
  far.<BR><BR>gerrie<BR>_______________________________________________<BR>collectd 
  mailing list<BR><A 
  href="mailto:collectd@verplant.org">collectd@verplant.org</A><BR><A 
  href="http://mailman.verplant.org/listinfo/collectd" 
  target=_blank>http://mailman.verplant.org/listinfo/collectd</A><BR></BLOCKQUOTE></DIV>
<HR noShade SIZE=1>
<A></A>
<P class="" align=left color="#000000" avgcert??>No virus found in this 
message.<BR>Checked by AVG - <A 
href="http://www.avg.com">www.avg.com</A><BR>Version: 2012.0.2176 / Virus 
Database: 2425/5022 - Release Date: 05/25/12</P></BODY></HTML>