digitalmars.D - OutOfMemoryException not being thrown
- Paul Clinch (19/26) Jan 23 2005 When running out of memory, I got:-
When running out of memory, I got:-
Program received signal SIGSEGV, Segmentation fault.
This was generated on a linux box, using dmd 0.111 and the prebuilt
libphobos.a and glibc 2.3.3. I wrote a simple prog. to create a array of
objects and limited the memory it was permitted with "ulimit -v 8000".
I traced what appears to be a bug in file gc.d, function _d_newclass. The
function didn't check the result of _gc.malloc. I changed the source as
follows:-
86,87c86,92
< debug(PRINTF) printf(" p = %p\n", p);
< _gc.setFinalizer(p, &new_finalizer);
---
if (!p)
_d_OutOfMemory();
else
{
debug(PRINTF) printf(" p = %p\n", p);
_gc.setFinalizer(p, &new_finalizer);
}
Now an exception is thrown and can be caught. (Then memory released).
I then checked back to the dmd 0.110 source to find the correct code
commented out!
My libphobos.a file turns out to be quite a bit bigger than the one shipped,
843522 instead of 839742. I used the shipped linux.mak and gcc 3.3.4.
Regards, Paul Clinch.
Jan 23 2005








Paul Clinch <pclinch internet-glue.co.uk>