oracle plugin: Fix a memory leak.
authorFlorian Forster <octo@collectd.org>
Sat, 21 Jan 2012 17:21:46 +0000 (18:21 +0100)
committerFlorian Forster <octo@collectd.org>
Sat, 21 Jan 2012 17:21:46 +0000 (18:21 +0100)
Parameters must be freed using OCIDescriptorFree. D'oh!

Thanks to Rena Vetterling for helping me hunt down this problem!

Change-Id: Ic374ae13085c8d2afbdf9a3c0ceef92b485e7723

src/oracle.c

index 145fc1f..1332da2 100644 (file)
@@ -568,11 +568,15 @@ static int o_read_database_query (o_database_t *db, /* {{{ */
         &column_name, &column_name_length, OCI_ATTR_NAME, oci_error);
     if (status != OCI_SUCCESS)
     {
+      OCIDescriptorFree (oci_param, OCI_DTYPE_PARAM);
       o_report_error ("o_read_database_query", "OCIAttrGet (OCI_ATTR_NAME)",
           oci_error);
       continue;
     }
 
+    OCIDescriptorFree (oci_param, OCI_DTYPE_PARAM);
+    oci_param = NULL;
+
     /* Copy the name to column_names. Warning: The ``string'' returned by OCI
      * may not be null terminated! */
     memset (column_names[i], 0, DATA_MAX_NAME_LEN);
@@ -750,6 +754,7 @@ static int o_shutdown (void) /* {{{ */
   }
   
   OCIHandleFree (oci_env, OCI_HTYPE_ENV);
+  oci_env = NULL;
 
   udb_query_free (queries, queries_num);
   queries = NULL;