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