Return free memory more aggressively.
authorLinus Nordberg <linus@nordberg.se>
Mon, 26 Aug 2013 10:04:07 +0000 (12:04 +0200)
committerLinus Nordberg <linus@nordberg.se>
Mon, 2 Sep 2013 11:45:46 +0000 (13:45 +0200)
Have free(3) call sbrk(2) when there's 4 MB to free (default on Linux
seems to be 128).

Patch by Fabian Mauchle.

Conflicts:
configure.ac

configure.ac
radsecproxy.c

index 79be2fc..f018e0b 100644 (file)
@@ -3,6 +3,8 @@ AC_CANONICAL_TARGET
 AM_INIT_AUTOMAKE
 AC_PROG_CC
 AC_PROG_RANLIB
+AC_CHECK_FUNCS([mallopt])
+
 udp=yes
 AC_ARG_ENABLE(udp,
   [  --enable-udp whether to enable UDP transport: yes/no; default yes ],
index 56abe3e..d05f9c9 100644 (file)
@@ -52,6 +52,9 @@
 #include <string.h>
 #include <unistd.h>
 #include <limits.h>
+#if defined(HAVE_MALLOPT)
+#include <malloc.h>
+#endif
 #ifdef SYS_SOLARIS9
 #include <fcntl.h>
 #endif
@@ -3348,6 +3351,10 @@ int radsecproxy_main(int argc, char **argv) {
        debugx(1, DBG_ERR, "pthread_attr_init failed");
     if (pthread_attr_setstacksize(&pthread_attr, PTHREAD_STACK_SIZE))
        debugx(1, DBG_ERR, "pthread_attr_setstacksize failed");
+#if defined(HAVE_MALLOPT)
+    if (mallopt(M_TRIM_THRESHOLD, 4 * 1024) != 1)
+       debugx(1, DBG_ERR, "mallopt failed");
+#endif
 
     for (i = 0; i < RAD_PROTOCOUNT; i++)
        protodefs[i] = protoinits[i](i);