X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=rts%2Fsm%2FMBlock.c;h=54d414807a1963005db95e4326f3226a62b57eef;hb=0981e24e9980b8b26e6f20fc56bebc1c7416cc4f;hp=85fe02da6e12a411b255e9194a8ce8e440f0a8b4;hpb=ab0e778ccfde61aed4c22679b24d175fc6cc9bf3;p=ghc-hetmet.git diff --git a/rts/sm/MBlock.c b/rts/sm/MBlock.c index 85fe02d..54d4148 100644 --- a/rts/sm/MBlock.c +++ b/rts/sm/MBlock.c @@ -49,6 +49,18 @@ lnat mblocks_allocated = 0; +#if !defined(mingw32_HOST_OS) && !defined(cygwin32_HOST_OS) +static caddr_t next_request = 0; +#endif + +void +initMBlocks(void) +{ +#if !defined(mingw32_HOST_OS) && !defined(cygwin32_HOST_OS) + next_request = (caddr_t)RtsFlags.GcFlags.heapBase; +#endif +} + /* ----------------------------------------------------------------------------- The MBlock Map: provides our implementation of HEAP_ALLOCED() -------------------------------------------------------------------------- */ @@ -258,7 +270,6 @@ gen_map_mblocks (lnat size) void * getMBlocks(nat n) { - static caddr_t next_request = (caddr_t)HEAP_BASE; caddr_t ret; lnat size = MBLOCK_SIZE * n; nat i; @@ -337,8 +348,13 @@ allocNew(nat n) { if(rec->base==0) { stgFree((void*)rec); rec=0; - sysErrorBelch( - "getMBlocks: VirtualAlloc MEM_RESERVE %d blocks failed", n); + if (GetLastError() == ERROR_NOT_ENOUGH_MEMORY) { + + errorBelch("out of memory"); + } else { + sysErrorBelch( + "getMBlocks: VirtualAlloc MEM_RESERVE %d blocks failed", n); + } } else { alloc_rec temp; temp.base=0; temp.size=0; temp.next=allocs;