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>
 Paul Clinch <pclinch internet-glue.co.uk>