From bd459776a424e40eb181f269a113eb30eb691cd3 Mon Sep 17 00:00:00 2001 From: Hisham Muhammad Date: Thu, 31 Mar 2011 20:24:59 +0000 Subject: [PATCH] retain meter state when it is reinit'ed in the Setup screen --- CPUMeter.c | 13 ++++++++----- Meter.c | 3 ++- 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); }