X-Git-Url: https://git.verplant.org/?a=blobdiff_plain;f=src%2Fturbostat.c;h=14ce29fdb20c0ef9d40ddda2ea48af88ea6da991;hb=3307054b6ab46b51fdda4f528e72d119e9de3071;hp=80650dff38539c781bf106a2cdcc462ceaaf3300;hpb=0c88d3b2d330c152be0bc6af8faecef0211a705e;p=collectd.git diff --git a/src/turbostat.c b/src/turbostat.c index 80650dff..14ce29fd 100644 --- a/src/turbostat.c +++ b/src/turbostat.c @@ -1037,6 +1037,7 @@ parse_int_file(const char *fmt, ...) } if (fscanf(filep, "%d", &value) != 1) { ERROR("turbostat plugin: Failed to parse number from '%s'", path); + fclose(filep); return -1; } fclose(filep); @@ -1253,10 +1254,22 @@ allocate_counters(struct thread_data **threads, struct core_data **cores, struct unsigned int i; unsigned int total_threads, total_cores; + if ((topology.num_threads == 0) + || (topology.num_cores == 0) + || (topology.num_packages == 0)) + { + ERROR ("turbostat plugin: Invalid topology: %u threads, %u cores, %u packages", + topology.num_threads, topology.num_cores, topology.num_packages); + return -1; + } + total_threads = topology.num_threads * topology.num_cores * topology.num_packages; *threads = calloc(total_threads, sizeof(struct thread_data)); if (*threads == NULL) - goto err; + { + ERROR ("turbostat plugin: calloc failed"); + return -1; + } for (i = 0; i < total_threads; ++i) (*threads)[i].cpu_id = topology.max_cpu_id + 1; @@ -1264,21 +1277,22 @@ allocate_counters(struct thread_data **threads, struct core_data **cores, struct total_cores = topology.num_cores * topology.num_packages; *cores = calloc(total_cores, sizeof(struct core_data)); if (*cores == NULL) - goto err_clean_threads; + { + ERROR ("turbostat plugin: calloc failed"); + sfree (threads); + return -1; + } *packages = calloc(topology.num_packages, sizeof(struct pkg_data)); if (*packages == NULL) - goto err_clean_cores; + { + ERROR ("turbostat plugin: calloc failed"); + sfree (cores); + sfree (threads); + return -1; + } return 0; - -err_clean_cores: - free(*cores); -err_clean_threads: - free(*threads); -err: - ERROR("turbostat plugin: Failled to allocate memory for counters"); - return -1; } static void @@ -1502,7 +1516,7 @@ check_permissions(void) } if (euidaccess("/dev/cpu/0/msr", R_OK)) { - WARNING("turbostat plugin: Collectd cannot open" + WARNING("turbostat plugin: Collectd cannot open " "/dev/cpu/0/msr. If you don't want to run collectd as " "root, you need to change the ownership (chown) and " "permissions on /dev/cpu/*/msr to allow such access"); @@ -1525,8 +1539,8 @@ turbostat_init(void) int ret; if (stat("/dev/cpu/0/msr", &sb)) { - ERROR("turbostat plugin: Initialization failed: /dev/cpu/0/msr" - " does not exist while the CPU supports MSR. You may be " + ERROR("turbostat plugin: Initialization failed: /dev/cpu/0/msr " + "does not exist while the CPU supports MSR. You may be " "missing the corresponding kernel module, please try '# " "modprobe msr'"); return -1;