ayaports/backports/opencascade/no_mallinfo.patch

61 lines
1.7 KiB
Diff

--- ./src/OSD/OSD_MemInfo.cxx.old
+++ ./src/OSD/OSD_MemInfo.cxx
@@ -35,6 +35,9 @@
#include <sstream>
#include <fstream>
+#include <sys/time.h>
+#include <sys/resource.h>
+
#include <OSD_MemInfo.hxx>
#if defined(__EMSCRIPTEN__)
@@ -161,18 +164,22 @@
|| IsActive (MemWorkingSetPeak))
{
// /proc/%d/status is not emulated - get more info from mallinfo()
- const struct mallinfo aMI = mallinfo();
+ // mallinfo() not available with musl. We use getrusage to approximate it
+ // with the maximum resident set size
+ struct rusage ru = { .ru_maxrss = 0 };
+ getrusage(RUSAGE_SELF, &ru);
if (IsActive (MemHeapUsage))
{
- myCounters[MemHeapUsage] = aMI.uordblks;
+ myCounters[MemHeapUsage] = ru.ru_maxrss;
}
if (IsActive (MemWorkingSet))
{
- myCounters[MemWorkingSet] = aMI.uordblks;
+ myCounters[MemWorkingSet] = ru.ru_maxrss;
}
if (IsActive (MemWorkingSetPeak))
{
- myCounters[MemWorkingSetPeak] = aMI.usmblks;
+ //usmblks is always 0
+ myCounters[MemWorkingSetPeak] = 0;
}
}
if (IsActive (MemVirtual))
@@ -182,18 +189,9 @@
#elif (defined(__linux__) || defined(__linux))
if (IsActive (MemHeapUsage))
{
- #if defined(__GLIBC__) && defined(__GLIBC_PREREQ)
- #if __GLIBC_PREREQ(2,33)
- #define HAS_MALLINFO2
- #endif
- #endif
-
- #ifdef HAS_MALLINFO2
- const struct mallinfo2 aMI = mallinfo2();
- #else
- const struct mallinfo aMI = mallinfo();
- #endif
- myCounters[MemHeapUsage] = aMI.uordblks;
+ struct rusage ru = { .ru_maxrss = 0 };
+ getrusage(RUSAGE_SELF, &ru);
+ myCounters[MemHeapUsage] = ru.ru_maxrss;
}
if (!IsActive (MemVirtual)