]> git.eshelyaron.com Git - emacs.git/commitdiff
Add new function `malloc-trim'
authorLars Ingebrigtsen <larsi@gnus.org>
Sun, 1 May 2022 09:51:35 +0000 (11:51 +0200)
committerLars Ingebrigtsen <larsi@gnus.org>
Sun, 1 May 2022 09:51:43 +0000 (11:51 +0200)
* configure.ac (PGTK_LIBS): Check for malloc_trim.

* src/alloc.c (Fmalloc_trim): Add new function (bug#45200).

configure.ac
etc/NEWS
src/alloc.c

index 53e5779e2f7cb008ac2120940a3f70e59d5cc299..b7189593a631cb33deb3b3a9d6e2dbe9fcd985a4 100644 (file)
@@ -2939,6 +2939,8 @@ fi
 AC_SUBST(PGTK_OBJ)
 AC_SUBST(PGTK_LIBS)
 
+AC_CHECK_FUNCS(malloc_trim)
+
 dnl D-Bus has been tested under GNU/Linux only.  Must be adapted for
 dnl other platforms.
 HAVE_DBUS=no
index 3f22e0b04e93d2bbb8575a5bd051504e5525d69f..371fbc2145a9b862c45ef97e587da0f042cd4276 100644 (file)
--- a/etc/NEWS
+++ b/etc/NEWS
@@ -1544,6 +1544,11 @@ functions.
 \f
 * Lisp Changes in Emacs 29.1
 
+---
+** New function 'malloc-trim'.
+This function allows returning unused memory back to the operating
+system, and is mainly meant as a debugging tool.
+
 ---
 ** 'x-show-tip' no longer hard-codes a timeout default.
 The new 'x-show-tooltip-timeout' variable allows the user to alter
index b9712859c38d151ed4aa32a0d47168ff438beb12..661f37dd5cc2da5803528d634985f19c26ee866f 100644 (file)
@@ -7479,6 +7479,37 @@ arenas.  */)
 }
 #endif
 
+#ifdef HAVE_MALLOC_TRIM
+DEFUN ("malloc-trim", Fmalloc_trim, Smalloc_trim, 0, 1, "",
+       doc: /* Release free memory from the heap.
+This function asks libc to return unused memory back to the operating
+system.  This function isn't guaranteed to do anything, and is mainly
+meant as a debugging tool.
+
+If LEAVE_PADDING is given, ask the system to leave that much unused
+spaced in the heap.  This should be an integer, and if not given,
+defaults to 0.
+
+This function returns nil if no memory could be returned to the
+system, and non-nil if some memory could be returned.  */)
+  (Lisp_Object leave_padding)
+{
+  int pad = 0;
+
+  if (! NILP (leave_padding))
+    {
+      CHECK_FIXNAT (leave_padding);
+      pad = XFIXNUM (leave_padding);
+    }
+
+  /* 1 means that memory was released to the system.  */
+  if (malloc_trim (pad) == 1)
+    return Qt;
+  else
+    return Qnil;
+}
+#endif
+
 static bool
 symbol_uses_obj (Lisp_Object symbol, Lisp_Object obj)
 {
@@ -7829,6 +7860,9 @@ N should be nonnegative.  */);
   (__GLIBC__ > 2 || __GLIBC_MINOR__ >= 10)
 
   defsubr (&Smalloc_info);
+#endif
+#ifdef HAVE_MALLOC_TRIM
+  defsubr (&Smalloc_trim);
 #endif
   defsubr (&Ssuspicious_object);