mirror of
https://git.tukaani.org/xz.git
synced 2025-11-02 22:42:55 +00:00
When no memory usage limits have been set by the user, the default for multithreaded mode has been 1/4 of total RAM. If this limit is too high and memory allocation fails, liblzma (and xz) fail. Perhaps liblzma should handle it better by reducing the number of threads and continuing with the amount of memory it can allocate, but currently that isn't the case. If resource limits were set to about 1/4 of RAM or lower, then xz could fail for the above reason. This commit makes xz look at RLIMIT_DATA, RLIMIT_AS, and RLIMIT_VMEM when they are available, and set the limit 64 MiB below the lowest of those limits. This is more or less a hack just like the 1/4-of-RAM method is, but this is simple and quick to implement. On Linux, there are other limits like cgroup v2 memory.max which can still make xz fail. The same is likely possible with FreeBSD's rctl(8). Co-authored-by: Lasse Collin <lasse.collin@tukaani.org> Thanks-to: Fangrui Song Fixes: https://github.com/tukaani-project/xz/issues/195 Closes: https://github.com/tukaani-project/xz/pull/196