Code

Let snmp_synch_response deal with PDU freeing
authorPierre-Yves Ritschard <pyr@spootnik.org>
Wed, 19 Nov 2014 15:00:54 +0000 (16:00 +0100)
committerPierre-Yves Ritschard <pyr@spootnik.org>
Wed, 19 Nov 2014 15:07:25 +0000 (16:07 +0100)
When reading from tables, upon errors the PDUs sent are already
freed by snmp_synch_response since they are right after
snmp_send is called.

This commit syncs collectd's approach with other occurences of
snmp_synch_response calls.

There might be a few corner cases where we leak PDUs, but it
is unclear how to check for those since we would need to
have an indication that snmp_send was never called, which
as far as I can tell is not possible.

The potential for failure in snmp_send is rather low and will
be easily spotted though, since when crafting invalid PDUs
snmp send will constantly fail and since valid configurations
can never leak memory.

This fixes #804

src/snmp.c

index 7d6e0a10fc2484683a97417a2f0fe154e8b73eea..6466503bd390887a674944f441c7c47e5f3550ed 100644 (file)
@@ -1618,8 +1618,9 @@ static int csnmp_read_table (host_definition_t *host, data_definition_t *data)
     snmp_free_pdu (res);
   res = NULL;
 
-  if (req != NULL)
-    snmp_free_pdu (req);
+  /*
+   * memory is handled by snmp_synch_response
+   */
   req = NULL;
 
   if (status == 0)