Alexandre Julliard : ntdll: Don't require heap sizes to be 64K aligned.

Alexandre Julliard julliard at winehq.org
Fri Jan 29 10:56:30 CST 2010


Module: wine
Branch: master
Commit: 0692bfda5f10e0c2dc6eed2a66e1a9f9c1092bad
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=0692bfda5f10e0c2dc6eed2a66e1a9f9c1092bad

Author: Alexandre Julliard <julliard at 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 );




More information about the wine-cvs mailing list