summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--CPUMeter.c13
-rw-r--r--Meter.c3
2 files changed, 10 insertions, 6 deletions
diff --git a/CPUMeter.c b/CPUMeter.c
index b6f8d35e..7c90bb6d 100644
--- a/CPUMeter.c
+++ b/CPUMeter.c
@@ -124,12 +124,15 @@ static void CPUMeter_display(Object* cast, RichString* out) {
static void AllCPUsMeter_init(Meter* this) {
int cpus = this->pl->cpuCount;
- this->drawData = malloc(sizeof(Meter*) * cpus);
+ if (!this->drawData)
+ this->drawData = calloc(sizeof(Meter*), cpus);
Meter** meters = (Meter**) this->drawData;
- for (int i = 0; i < cpus; i++)
- meters[i] = Meter_new(this->pl, i+1, &CPUMeter);
- this->h = cpus;
- this->mode = BAR_METERMODE;
+ for (int i = 0; i < cpus; i++) {
+ if (!meters[i])
+ meters[i] = Meter_new(this->pl, i+1, &CPUMeter);
+ meters[i]->type->init(meters[i]);
+ }
+ this->h = Meter_modes[this->mode]->h;
}
static void AllCPUsMeter_done(Meter* this) {
diff --git a/Meter.c b/Meter.c
index fe31e54a..713cd12f 100644
--- a/Meter.c
+++ b/Meter.c
@@ -155,8 +155,9 @@ Meter* Meter_new(ProcessList* pl, int param, MeterType* type) {
}
void Meter_delete(Object* cast) {
+ if (!cast)
+ return;
Meter* this = (Meter*) cast;
- assert (this != NULL);
if (this->type->done) {
this->type->done(this);
}