X-Git-Url: https://git.octo.it/?a=blobdiff_plain;f=src%2Fturbostat.c;h=42fed52a3e496b8e87036f20150023ce50a56ff2;hb=6bf2e82bf5049af097beae4a8b7f086466520839;hp=80650dff38539c781bf106a2cdcc462ceaaf3300;hpb=363bd0300297144a29b58cc813b23d9353525178;p=collectd.git diff --git a/src/turbostat.c b/src/turbostat.c index 80650dff..42fed52a 100644 --- a/src/turbostat.c +++ b/src/turbostat.c @@ -1253,10 +1253,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 +1276,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