Module: wine Branch: master Commit: 0692bfda5f10e0c2dc6eed2a66e1a9f9c1092bad URL: http://source.winehq.org/git/wine.git/?a=commit;h=0692bfda5f10e0c2dc6eed2a66...
Author: Alexandre Julliard julliard@winehq.org Date: Thu Jan 28 19:47:01 2010 +0100
ntdll: Don't require heap sizes to be 64K aligned.
---
dlls/kernel32/tests/alloc.c | 12 +++--------- dlls/ntdll/heap.c | 7 ++----- 2 files changed, 5 insertions(+), 14 deletions(-)
diff --git a/dlls/kernel32/tests/alloc.c b/dlls/kernel32/tests/alloc.c index 8cb0915..c1b2afc 100644 --- a/dlls/kernel32/tests/alloc.c +++ b/dlls/kernel32/tests/alloc.c @@ -70,15 +70,9 @@ static void test_Heap(void) heap=HeapCreate(0,2*memchunk,5*memchunk);
/* Check that HeapCreate allocated the right amount of ram */ - todo_wine { - /* Today HeapCreate seems to return a memory block larger than specified. - MSDN says the maximum heap size should be dwMaximumSize rounded up to the - nearest page boundary - */ - mem1=HeapAlloc(heap,0,5*memchunk+1); - ok(mem1==NULL,"HeapCreate allocated more Ram than it should have\n"); - HeapFree(heap,0,mem1); - } + mem1=HeapAlloc(heap,0,5*memchunk+1); + ok(mem1==NULL,"HeapCreate allocated more Ram than it should have\n"); + HeapFree(heap,0,mem1);
/* Check that a normal alloc works */ mem1=HeapAlloc(heap,0,memchunk); diff --git a/dlls/ntdll/heap.c b/dlls/ntdll/heap.c index 622b174..9a41d68 100644 --- a/dlls/ntdll/heap.c +++ b/dlls/ntdll/heap.c @@ -856,16 +856,13 @@ static SUBHEAP *HEAP_CreateSubHeap( HEAP *heap, LPVOID address, DWORD flags,
if (!address) { - /* round-up sizes on a 64K boundary */ - totalSize = (totalSize + 0xffff) & 0xffff0000; - commitSize = (commitSize + 0xffff) & 0xffff0000; - if (!commitSize) commitSize = 0x10000; + if (!commitSize) commitSize = COMMIT_MASK + 1; totalSize = min( totalSize, 0xffff0000 ); /* don't allow a heap larger than 4Gb */ if (totalSize < commitSize) totalSize = commitSize; if (flags & HEAP_SHARED) commitSize = totalSize; /* always commit everything in a shared heap */
/* allocate the memory block */ - if (NtAllocateVirtualMemory( NtCurrentProcess(), &address, 0, &totalSize, + if (NtAllocateVirtualMemory( NtCurrentProcess(), &address, 5, &totalSize, MEM_RESERVE, get_protection_type( flags ) )) { WARN("Could not allocate %08lx bytes\n", totalSize );