From 27c45d189f090cae7f712dc9f12b1b5cd46f463b Mon Sep 17 00:00:00 2001 From: heeks Date: Mon, 6 Nov 2023 19:26:47 +0100 Subject: [PATCH 1/2] Fix segfault in GetCpuCores The branch reading line 12 of /proc/cpuinfo is valid only for __x86_64__ --- contrib/mma/src/linux/mma_linux.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/contrib/mma/src/linux/mma_linux.cpp b/contrib/mma/src/linux/mma_linux.cpp index 23596253d5..96b6ff312c 100644 --- a/contrib/mma/src/linux/mma_linux.cpp +++ b/contrib/mma/src/linux/mma_linux.cpp @@ -488,6 +488,7 @@ int MMALinux::GetCpuCores(void) std::list cpuinfo_list = TokenizeIntoLines(FileToString("/proc/cpuinfo")); std::vector cpucore_vect; auto idx = 0; +#ifdef __x86_64__ if(!is_vrm) { for (auto iter : cpuinfo_list) @@ -502,6 +503,7 @@ int MMALinux::GetCpuCores(void) return std::stoi(cpucore_vect[3]); } else +#endif { auto cpu_cores=0; for (auto iter : cpuinfo_list) From 9ca436b95fe4a541b76dc18c51b5eef17ec7fba2 Mon Sep 17 00:00:00 2001 From: heeks Date: Tue, 7 Nov 2023 18:03:15 +0100 Subject: [PATCH 2/2] Use get_nprocs() to read the number of cores which is simpler and more generic. --- contrib/mma/src/linux/mma_linux.cpp | 36 ++--------------------------- 1 file changed, 2 insertions(+), 34 deletions(-) diff --git a/contrib/mma/src/linux/mma_linux.cpp b/contrib/mma/src/linux/mma_linux.cpp index 96b6ff312c..07058c08c8 100644 --- a/contrib/mma/src/linux/mma_linux.cpp +++ b/contrib/mma/src/linux/mma_linux.cpp @@ -28,6 +28,7 @@ #include #include #include +#include #include "../include/linux/mma_linux.h" @@ -485,40 +486,7 @@ bool MMALinux::MergeBootWithRootARM(ResourceLinux::DiskStatsList& /*disk_stats_i int MMALinux::GetCpuCores(void) { - std::list cpuinfo_list = TokenizeIntoLines(FileToString("/proc/cpuinfo")); - std::vector cpucore_vect; - auto idx = 0; -#ifdef __x86_64__ - if(!is_vrm) - { - for (auto iter : cpuinfo_list) - { - if (idx == 12) - { - cpucore_vect = SplitLine(iter); - break; - } - idx++; - } - return std::stoi(cpucore_vect[3]); - } - else -#endif - { - auto cpu_cores=0; - for (auto iter : cpuinfo_list) - { - cpucore_vect = SplitLine(iter); - for(auto iter1:cpucore_vect) - { - if(iter1.find("processor")!= std::string::npos) - { - cpu_cores++; - } - } - } - return cpu_cores; - } + return get_nprocs(); } bool MMALinux::CheckIfIsALinuxVRM()