1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
|
From f6310c2b791275f3727f2240ca7fab9f58db943d Mon Sep 17 00:00:00 2001
From: Heiko Becker <heiko.becker@kde.org>
Date: Tue, 22 Mar 2022 22:08:10 +0100
Subject: [PATCH] Detect the presence of malloc_trim to fix the build with musl
malloc_trim is indeed a GNU extension, but an extension of glibc.
Relying on __GNUC__ unfortunately doesn't help with that. Check for
the actual presence of malloc_trim with cmake's check_function_exists
instead.
This fixes the build with musl libc, which doesn't come with
malloc_trim.
Co-authored-by: Ahmad Samir <a.samirh78@gmail.com>
---
CMakeLists.txt | 2 +-
src/Screen.cpp | 17 +++++++----------
src/config-konsole.h.cmake | 4 ++--
3 files changed, 10 insertions(+), 13 deletions(-)
diff --git a/CMakeLists.txt b/CMakeLists.txt
index e6775aeef..9e990c37d 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -94,7 +94,7 @@ set(HAVE_X11 ${X11_FOUND})
# Check for function GETPWUID
check_symbol_exists(getpwuid "pwd.h" HAVE_GETPWUID)
-check_include_files(malloc.h HAVE_MALLOC_H)
+check_function_exists(malloc_trim HAVE_MALLOC_TRIM)
# See above includes for defaults
add_definitions(
diff --git a/src/Screen.cpp b/src/Screen.cpp
index ad578b4fd..10876f988 100644
--- a/src/Screen.cpp
+++ b/src/Screen.cpp
@@ -28,13 +28,11 @@
#include "history/HistoryType.h"
#include "profile/Profile.h"
-#ifdef HAVE_MALLOC_H
- // For malloc_trim, which is a GNU extension
- #ifdef __GNUC__
- extern "C" {
- #include <malloc.h>
- }
- #endif
+#ifdef HAVE_MALLOC_TRIM
+// For malloc_trim, which is a GNU extension
+extern "C" {
+#include <malloc.h>
+}
#endif
using namespace Konsole;
@@ -1799,14 +1797,13 @@ void Screen::setScroll(const HistoryType &t, bool copyPreviousScroll)
t.scroll(_history);
}
-#ifdef HAVE_MALLOC_H
+#ifdef HAVE_MALLOC_TRIM
+
#ifdef Q_OS_LINUX
-#ifdef __GNUC__
// We might have been using gigabytes of memory, so make sure it is actually released
malloc_trim(0);
#endif
#endif
-#endif
}
bool Screen::hasScroll() const
diff --git a/src/config-konsole.h.cmake b/src/config-konsole.h.cmake
index b74992b0a..4b1d9b515 100644
--- a/src/config-konsole.h.cmake
+++ b/src/config-konsole.h.cmake
@@ -15,5 +15,5 @@
#cmakedefine HAVE_GETPWUID ${HAVE_GETPWUID}
-/* Define to 1 if you have the <malloc.h> header file. */
-#cmakedefine HAVE_MALLOC_H 1
+/* Defined if system has the malloc_trim function, which is a GNU extension */
+#cmakedefine HAVE_MALLOC_TRIM
--
GitLab
|