return 0;
result = calloc(RESMON_SRC_CPUHP_COUNT, sizeof(*result));
+ if (!result)
+ return -ENOMEM;
for (i = 0; i < RESMON_SRC_CPUHP_COUNT; i++) {
result[i].load = calloc(RESMON_SRC_CPUHP_COUNT,
sizeof(unsigned int));
+ if (!result[i].load)
+ goto err;
+
result[i].nr_running = calloc(RESMON_SRC_CPUHP_COUNT,
sizeof(unsigned int));
+ if (!result[i].nr_running)
+ goto err;
+
result[i].runnable_load = calloc(RESMON_SRC_CPUHP_COUNT,
sizeof(unsigned int));
+ if (!result[i].runnable_load)
+ goto err;
}
monitor->result = result;
return 0;
+err:
+ for (i = 0; i < RESMON_SRC_CPUHP_COUNT; i++) {
+ if (result[i].load) {
+ free(result[i].load);
+ result[i].load = NULL;
+ }
+
+ if (result[i].nr_running) {
+ free(result[i].nr_running);
+ result[i].nr_running = NULL;
+ }
+
+ if (result[i].runnable_load) {
+ free(result[i].runnable_load);
+ result[i].runnable_load = NULL;
+ }
+ }
+
+ if (result) {
+ free(result);
+ result = NULL;
+ }
+
+ return -ENOMEM;
}
/**
return -ENOMEM;
for (i = 0; i < RESMON_SRC_CPUHP_COUNT; i++) {
- free(result[i].load);
- free(result[i].nr_running);
- free(result[i].runnable_load);
+ if (result[i].load) {
+ free(result[i].load);
+ result[i].load = NULL;
+ }
+
+ if (result[i].nr_running) {
+ free(result[i].nr_running);
+ result[i].nr_running = NULL;
+ }
+
+ if (result[i].runnable_load) {
+ free(result[i].runnable_load);
+ result[i].runnable_load = NULL;
+ }
}
- free(monitor->result);
- monitor->result = NULL;
+ if (monitor->result) {
+ free(monitor->result);
+ monitor->result = NULL;
+ }
return 0;
}