Download raw body.
archivers/xz: use RLIMIT_DATA as the default maximum memory limit
Christian,
I'd like to include a small patch for our archivers/xz.
It limits the defaul limit of the maximum availavle memory from 1/4 of RAM
to an actual RLIMIT_DATA, if it smaller.
Without this patch I can't unpack any of chromium on a machine with 256Gb
RAM when I run a make build MAKE_JOBS=64. It fails as:
xz: (stdin): Cannot allocate memory
tar: End of archive volume 1 reached
Ok?
Index: Makefile
===================================================================
RCS file: /home/cvs/ports/archivers/xz/Makefile,v
diff -u -p -r1.55 Makefile
--- Makefile 15 Apr 2025 19:34:02 -0000 1.55
+++ Makefile 7 Sep 2025 08:44:07 -0000
@@ -1,6 +1,7 @@
COMMENT= library and tools for XZ and LZMA compressed files
VERSION= 5.8.1
+REVISION= 0
DISTNAME= xz-${VERSION}
SHARED_LIBS= lzma 2.4 # 13.1
CATEGORIES= archivers
Index: patches/patch-src_xz_hardware_c
===================================================================
RCS file: patches/patch-src_xz_hardware_c
diff -N patches/patch-src_xz_hardware_c
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ patches/patch-src_xz_hardware_c 7 Sep 2025 15:01:09 -0000
@@ -0,0 +1,27 @@
+https://github.com/tukaani-project/xz/pull/196
+
+Index: src/xz/hardware.c
+--- src/xz/hardware.c.orig
++++ src/xz/hardware.c
+@@ -11,6 +11,7 @@
+
+ #include "private.h"
+
++#include <sys/resource.h>
+
+ /// Maximum number of worker threads. This can be set with
+ /// the --threads=NUM command line option.
+@@ -320,6 +321,13 @@ hardware_init(void)
+ // One Linux-specific suggestion is to use MemAvailable from
+ // /proc/meminfo as the starting point.
+ memlimit_mt_default = total_ram / 4;
++
++ struct rlimit rlp;
++ if (getrlimit(RLIMIT_DATA, &rlp) == 0
++ && rlp.rlim_cur != RLIM_INFINITY
++ && memlimit_mt_default > rlp.rlim_cur
++ )
++ memlimit_mt_default = rlp.rlim_cur;
+
+ #if SIZE_MAX == UINT32_MAX
+ // A too high value may cause 32-bit xz to run out of address space.
--
wbr, Kirill
archivers/xz: use RLIMIT_DATA as the default maximum memory limit