Fixed NULL pointer bug.
[collectd.git] / src / netapp.c
index a4b30cc..0eb475a 100644 (file)
@@ -243,6 +243,9 @@ static void free_volume (volume_t *volume) /* {{{ */
 {
        volume_t *next;
 
+       if (volume == NULL)
+               return;
+
        next = volume->next;
 
        sfree (volume->name);
@@ -255,6 +258,9 @@ static void free_disk (disk_t *disk) /* {{{ */
 {
        disk_t *next;
 
+       if (disk == NULL)
+               return;
+
        next = disk->next;
 
        sfree (disk->name);
@@ -263,15 +269,40 @@ static void free_disk (disk_t *disk) /* {{{ */
        free_disk (next);
 } /* }}} void free_disk */
 
+static void free_cfg_wafl (cfg_wafl_t *cw) /* {{{ */
+{
+       if (cw == NULL)
+               return;
+
+       if (cw->query != NULL)
+               na_elem_free (cw->query);
+
+       sfree (cw);
+} /* }}} void free_cfg_wafl */
+
 static void free_cfg_disk (cfg_disk_t *cfg_disk) /* {{{ */
 {
        if (cfg_disk == NULL)
                return;
 
+       if (cfg_disk->query != NULL)
+               na_elem_free (cfg_disk->query);
+
        free_disk (cfg_disk->disks);
        sfree (cfg_disk);
 } /* }}} void free_cfg_disk */
 
+static void free_cfg_system (cfg_system_t *cs) /* {{{ */
+{
+       if (cs == NULL)
+               return;
+
+       if (cs->query != NULL)
+               na_elem_free (cs->query);
+
+       sfree (cs);
+} /* }}} void free_cfg_system */
+
 static void free_cfg_service (cfg_service_t *service) /* {{{ */
 {
        cfg_service_t *next;
@@ -305,6 +336,8 @@ static void free_host_config (host_config_t *hc) /* {{{ */
 
        free_cfg_service (hc->services);
        free_cfg_disk (hc->cfg_disk);
+       free_cfg_wafl (hc->cfg_wafl);
+       free_cfg_system (hc->cfg_system);
        free_volume (hc->volumes);
 
        sfree (hc);
@@ -1651,6 +1684,14 @@ static int cna_config_disk(host_config_t *host, oconfig_item_t *ci) { /* {{{ */
                        cna_config_bool_to_flag (item, &cfg_disk->flags, CFG_DISK_BUSIEST);
        }
 
+       if ((cfg_disk->flags & CFG_DISK_ALL) == 0)
+       {
+               NOTICE ("netapp plugin: All disk related values have been disabled. "
+                               "Collection of per-disk data will be disabled entirely.");
+               free_cfg_disk (host->cfg_disk);
+               host->cfg_disk = NULL;
+       }
+
        return (0);
 } /* }}} int cna_config_disk */
 
@@ -1695,6 +1736,14 @@ static int cna_config_wafl(host_config_t *host, oconfig_item_t *ci) /* {{{ */
                                        "`WAFL' blocks.", item->key);
        }
 
+       if ((cfg_wafl->flags & CFG_WAFL_ALL) == 0)
+       {
+               NOTICE ("netapp plugin: All WAFL related values have been disabled. "
+                               "Collection of WAFL data will be disabled entirely.");
+               free_cfg_wafl (host->cfg_wafl);
+               host->cfg_wafl = NULL;
+       }
+
        return (0);
 } /* }}} int cna_config_wafl */
 
@@ -1742,6 +1791,14 @@ static int cna_config_system (host_config_t *host, /* {{{ */
                }
        }
 
+       if ((cfg_system->flags & CFG_SYSTEM_ALL) == 0)
+       {
+               NOTICE ("netapp plugin: All system related values have been disabled. "
+                               "Collection of system data will be disabled entirely.");
+               free_cfg_system (host->cfg_system);
+               host->cfg_system = NULL;
+       }
+
        return (0);
 } /* }}} int cna_config_system */