Skip to content

Commit 5cca6df

Browse files
committed
Fix memory leaks. Add debug message when microarch is unknown
1 parent de8952b commit 5cca6df

File tree

7 files changed

+27
-14
lines changed

7 files changed

+27
-14
lines changed

src/cpuid.c

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -909,10 +909,12 @@ char* get_str_freq(struct frequency* freq) {
909909
return string;
910910
}
911911

912-
void print_levels(struct cpuInfo* cpu, char* cpu_name) {
913-
printf("%s\n", cpu_name);
912+
void print_levels(struct cpuInfo* cpu) {
913+
printf("%s\n", cpu->cpu_name);
914914
printf("- Max standart level: 0x%.8X\n", cpu->maxLevels);
915915
printf("- Max extended level: 0x%.8X\n", cpu->maxExtendedLevels);
916+
917+
free_cpuinfo_struct(cpu);
916918
}
917919

918920
void free_topo_struct(struct topology* topo) {
@@ -931,3 +933,9 @@ void free_cache_struct(struct cache* cach) {
931933
void free_freq_struct(struct frequency* freq) {
932934
free(freq);
933935
}
936+
937+
void free_cpuinfo_struct(struct cpuInfo* cpu) {
938+
free_uarch_struct(cpu->arch);
939+
free(cpu->cpu_name);
940+
free(cpu);
941+
}

src/cpuid.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -97,12 +97,12 @@ char* get_str_topology(struct cpuInfo* cpu, struct topology* topo, bool dual_soc
9797

9898
char* get_str_peak_performance(struct cpuInfo* cpu, struct topology* topo, int64_t freq);
9999

100-
void print_levels(struct cpuInfo* cpu, char* cpu_name);
100+
void print_levels(struct cpuInfo* cpu);
101101

102-
void free_cpuinfo_struct(struct cpuInfo* cpu);
103102
void free_cache_struct(struct cache* cach);
104103
void free_topo_struct(struct topology* topo);
105104
void free_freq_struct(struct frequency* freq);
105+
void free_cpuinfo_struct(struct cpuInfo* cpu);
106106

107107
void debug_cpu_info(struct cpuInfo* cpu);
108108
void debug_cache(struct cache* cach);

src/global.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ void printBug(const char *fmt, ...) {
5151
vsnprintf(buffer,buffer_size, fmt, args);
5252
va_end(args);
5353
fprintf(stderr,RED "[ERROR]: "RESET "%s\n",buffer);
54-
fprintf(stderr,"Please, create a new issue with this error message and your CPU in https://github.com/Dr-Noob/cpufetch/issues\n");
54+
fprintf(stderr,"Please, create a new issue with this error message and your CPU model in https://github.com/Dr-Noob/cpufetch/issues\n");
5555
}
5656

5757
void set_log_level(bool verbose) {

src/main.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
#include "cpuid.h"
77
#include "global.h"
88

9-
static const char* VERSION = "0.65";
9+
static const char* VERSION = "0.66";
1010

1111
void print_help(char *argv[]) {
1212
printf("Usage: %s [--version] [--help] [--levels] [--style \"fancy\"|\"retro\"|\"legacy\"] [--color \"intel\"|\"amd\"|'R,G,B:R,G,B:R,G,B:R,G,B']\n\n\
@@ -62,7 +62,7 @@ int main(int argc, char* argv[]) {
6262

6363
if(show_levels()) {
6464
print_version();
65-
print_levels(cpu, get_str_cpu_name(cpu));
65+
print_levels(cpu);
6666
return EXIT_SUCCESS;
6767
}
6868

src/printer.c

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -363,8 +363,6 @@ bool print_cpufetch(struct cpuInfo* cpu, struct cache* cach, struct frequency* f
363363

364364
print_ascii(art);
365365

366-
free(cpu_name);
367-
free(uarch);
368366
free(manufacturing_process);
369367
free(max_frequency);
370368
free(sockets);
@@ -376,15 +374,15 @@ bool print_cpufetch(struct cpuInfo* cpu, struct cache* cach, struct frequency* f
376374
free(l1d);
377375
free(l2);
378376
free(l3);
379-
free(pp);
380-
381-
free(cpu);
377+
free(pp);
378+
382379
free(art);
383380

384381
if(cs != NULL) free_colors_struct(cs);
385382
free_cache_struct(cach);
386383
free_topo_struct(topo);
387384
free_freq_struct(freq);
385+
free_cpuinfo_struct(cpu);
388386

389387
return true;
390388
}

src/uarch.c

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
#include <string.h>
55

66
#include "uarch.h"
7+
#include "global.h"
78

89
/*
910
* - cpuid codes are based on Todd Allen's cpuid program
@@ -110,10 +111,10 @@ struct uarch {
110111
#define UARCH_START if (false) {}
111112
#define CHECK_UARCH(arch, ef_, f_, em_, m_, s_, str, uarch, process) \
112113
else if (ef_ == ef && f_ == f && (em_ == NA || em_ == em) && (m_ == NA || m_ == m) && (s_ == NA || s_ == s)) fill_uarch(arch, str, uarch, process);
113-
#define UARCH_END else { arch->uarch = UARCH_UNKNOWN; }
114+
#define UARCH_END else { printBug("Unknown microarchitecture detected: M=0x%.8X EM=0x%.8X F=0x%.8X EF=0x%.8X S=0x%.8X", m, em, f, ef, s); fill_uarch(arch, "Unknown", UARCH_UNKNOWN, 0); }
114115

115116
void fill_uarch(struct uarch* arch, char* str, MICROARCH u, uint32_t process) {
116-
arch->uarch_str = malloc(sizeof(char) * strlen(str));
117+
arch->uarch_str = malloc(sizeof(char) * (strlen(str)+1));
117118
strcpy(arch->uarch_str, str);
118119
arch->uarch = u;
119120
arch->process= process;
@@ -389,3 +390,8 @@ char* get_str_process(struct cpuInfo* cpu) {
389390

390391
return str;
391392
}
393+
394+
void free_uarch_struct(struct uarch* arch) {
395+
free(arch->uarch_str);
396+
free(arch);
397+
}

src/uarch.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,5 +12,6 @@ bool vpus_are_AVX512(struct cpuInfo* cpu);
1212
int get_number_of_vpus(struct cpuInfo* cpu);
1313
char* get_str_uarch(struct cpuInfo* cpu);
1414
char* get_str_process(struct cpuInfo* cpu);
15+
void free_uarch_struct(struct uarch* arch);
1516

1617
#endif

0 commit comments

Comments
 (0)