* Paul Eggert: > On 7/23/20 5:24 AM, Florian Weimer wrote: >> Ah, 4096 is too small. >> >> For large allocations (above the mmap threshold), what happens in the >> example is that the process VMA limit is eventually exhausted, at which >> malloc falls back to sbrk, and then the algorithm succeeds. I don't >> think it's a good idea to trigger ENOMEM, it's certainly not >> thread-safe. > > I'm not sure I see what ENOMEM has to do with it if the algorithm is > succeeding.
During the mmap phase, the algorithm never achieves alignment. Once mmap fails with ENOMEM (likely because the number of VMAs would exceed the per-process limit), malloc switch to the brk heap, where the algorithm eventually produces an aligned allocation. Only then the loop terminates. Thanks, Florian