X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=win32%2Fvmem.h;h=460f55793a81e52b759a98b6f096a491c6c99f4a;hb=3ce3ed558a83da8e2c458cdff55957484ff161a7;hp=712a76edad85fcea0a2701f38b4354ac60469e11;hpb=05ec9bb346c404c8906ed1ac374d4bce61c84f5d;p=p5sagit%2Fp5-mst-13.2.git diff --git a/win32/vmem.h b/win32/vmem.h index 712a76e..460f557 100644 --- a/win32/vmem.h +++ b/win32/vmem.h @@ -21,7 +21,9 @@ #ifndef ___VMEM_H_INC___ #define ___VMEM_H_INC___ +#ifndef UNDER_CE #define _USE_MSVCRT_MEM_ALLOC +#endif #define _USE_LINKED_LIST // #define _USE_BUDDY_BLOCKS @@ -162,6 +164,10 @@ void* VMem::Malloc(size_t size) #ifdef _USE_LINKED_LIST GetLock(); PMEMORY_BLOCK_HEADER ptr = (PMEMORY_BLOCK_HEADER)m_pmalloc(size+sizeof(MEMORY_BLOCK_HEADER)); + if (!ptr) { + FreeLock(); + return NULL; + } LinkBlock(ptr); FreeLock(); return (ptr+1); @@ -185,6 +191,10 @@ void* VMem::Realloc(void* pMem, size_t size) PMEMORY_BLOCK_HEADER ptr = (PMEMORY_BLOCK_HEADER)(((char*)pMem)-sizeof(MEMORY_BLOCK_HEADER)); UnlinkBlock(ptr); ptr = (PMEMORY_BLOCK_HEADER)m_prealloc(ptr, size+sizeof(MEMORY_BLOCK_HEADER)); + if (!ptr) { + FreeLock(); + return NULL; + } LinkBlock(ptr); FreeLock(); @@ -205,7 +215,8 @@ void VMem::Free(void* pMem) dTHX; int *nowhere = NULL; Perl_warn(aTHX_ "Free to wrong pool %p not %p",this,ptr->owner); - *nowhere = 0; + *nowhere = 0; /* this segfault is deliberate, + so you can see the stack trace */ #else ptr->owner->Free(pMem); #endif @@ -1034,7 +1045,7 @@ int VMem::HeapAdd(void* p, size_t size if(ptr == m_heaps[index].base + (int)m_heaps[index].len) { /* * The new block is contiguous with a previously allocated heap area. Add its - * length to that of the previous heap. Merge it with the the dummy end-of-heap + * length to that of the previous heap. Merge it with the dummy end-of-heap * area marker of the previous heap. */ m_heaps[index].len += size;