[erlang-patches] fix 64-bit related memory management bugs

Richard Carlsson <>
Sat Aug 13 22:13:00 CEST 2011


We discovered that if a single Erlang process tried to grow above 32 GB 
(i.e., more 64-bit words than can be counted by a 32-bit number), the VM 
failed to find the next larger heap size, even though there were plenty 
more heap sizes left to pick from and even though we had a lot more 
memory available on the machine. (Obviously, this is only applicable on 
64-bit Erlang.)

It turned out to be due to some 'int' variables in the heap resizing 
parts of erl_gc.c not being properly updated to 'Uint' or 'Sint'. Once 
that was fixed, I got segfaults instead as soon as the heap got larger 
than 2^32 words, due to even more 'int' declarations in the same file, 
but now in the GC code.

After fixing this as well, I successfully ran an Erlang node in which a 
single Erlang process had a heap so large that I'm not at liberty to 
divulge the exact size, but I think the scientific term is "humongous", 
and I'm confident that there are no further immediate problems with very 
very large individual process heaps.

A patch against R14B03 is here:

   https://github.com/richcarl/otp/tree/r14-gc-fix

and here's another against R13B04:

   https://github.com/richcarl/otp/tree/r13-gc-fix


     /Richard


More information about the erlang-patches mailing list