aports/testing/opencascade/no_mallinfo.patch
2021-07-13 12:17:56 +00:00

54 lines
1.6 KiB
Diff

mallinfo() is not provided in musl. This patch uses getrusage() instead to use
the maximum resident set size as a (poor) approximation of the heap usage.
--- occt-V7_3_0p3.bin/src/OSD/OSD_MemInfo.cxx
+++ occt-V7_3_0p3/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,8 +189,9 @@
#elif (defined(__linux__) || defined(__linux))
if (IsActive (MemHeapUsage))
{
- const struct mallinfo aMI = mallinfo();
- myCounters[MemHeapUsage] = aMI.uordblks;
+ struct rusage ru = { .ru_maxrss = 0 };
+ getrusage(RUSAGE_SELF, &ru);
+ myCounters[MemHeapUsage] = ru.ru_maxrss;
}
if (!IsActive (MemVirtual)