Check if CPU sensor file handle is valid

pull/93/head
jackun 4 years ago
parent 64a42df047
commit 712590befe
No known key found for this signature in database
GPG Key ID: 119DB3F1D05A9ED3

@ -26,7 +26,6 @@
#endif #endif
#include "file_utils.h" #include "file_utils.h"
FILE *cpuTempFile = nullptr;
pthread_t cpuTempThread; pthread_t cpuTempThread;
void calculateCPUData(CPUData& cpuData, void calculateCPUData(CPUData& cpuData,
@ -99,11 +98,17 @@ CPUStats::CPUStats()
{ {
} }
CPUStats::~CPUStats()
{
if (m_cpuTempFile)
fclose(m_cpuTempFile);
}
bool CPUStats::Init() bool CPUStats::Init()
{ {
if (m_inited) if (m_inited)
return true; return true;
CPUStats::GetCpuFile();
std::string line; std::string line;
std::ifstream file (PROCSTATFILE); std::ifstream file (PROCSTATFILE);
bool first = true; bool first = true;
@ -220,10 +225,13 @@ bool CPUStats::UpdateCoreMhz() {
} }
bool CPUStats::UpdateCpuTemp() { bool CPUStats::UpdateCpuTemp() {
if (!m_cpuTempFile)
return false;
m_cpuDataTotal.temp = 0; m_cpuDataTotal.temp = 0;
rewind(cpuTempFile); rewind(m_cpuTempFile);
fflush(cpuTempFile); fflush(m_cpuTempFile);
if (fscanf(cpuTempFile, "%d", &m_cpuDataTotal.temp) != 1) if (fscanf(m_cpuTempFile, "%d", &m_cpuDataTotal.temp) != 1)
return false; return false;
m_cpuDataTotal.temp /= 1000; m_cpuDataTotal.temp /= 1000;
@ -231,6 +239,9 @@ bool CPUStats::UpdateCpuTemp() {
} }
bool CPUStats::GetCpuFile() { bool CPUStats::GetCpuFile() {
if (m_cpuTempFile)
return true;
std::string name, path; std::string name, path;
std::string hwmon = "/sys/class/hwmon/"; std::string hwmon = "/sys/class/hwmon/";
@ -249,8 +260,9 @@ bool CPUStats::GetCpuFile() {
if (!file_exists(path)) { if (!file_exists(path)) {
std::cerr << "MANGOHUD: Could not find cpu temp sensor location" << std::endl; std::cerr << "MANGOHUD: Could not find cpu temp sensor location" << std::endl;
return false;
} else { } else {
cpuTempFile = fopen(path.c_str(), "r"); m_cpuTempFile = fopen(path.c_str(), "r");
} }
return true; return true;
} }

@ -1,5 +1,6 @@
#include <vector> #include <vector>
#include <cstdint> #include <cstdint>
#include <cstdio>
typedef struct CPUData_ { typedef struct CPUData_ {
unsigned long long int totalTime; unsigned long long int totalTime;
@ -36,6 +37,7 @@ class CPUStats
{ {
public: public:
CPUStats(); CPUStats();
~CPUStats();
bool Init(); bool Init();
bool Updated() bool Updated()
{ {
@ -62,6 +64,7 @@ private:
double m_cpuPeriod = 0; double m_cpuPeriod = 0;
bool m_updatedCPUs = false; // TODO use caching or just update? bool m_updatedCPUs = false; // TODO use caching or just update?
bool m_inited = false; bool m_inited = false;
FILE *m_cpuTempFile = nullptr;
}; };
extern CPUStats cpuStats; extern CPUStats cpuStats;
Loading…
Cancel
Save