From fe5b19d15b48885c1effd440bc8e198635075344 Mon Sep 17 00:00:00 2001 From: Alexandre Julliard Date: Tue, 20 Feb 2001 00:52:41 +0000 Subject: [PATCH] Fixed MEM_SYSTEM handling to avoid unmapping areas that we didn't mmap. --- memory/virtual.c | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/memory/virtual.c b/memory/virtual.c index 27f6218fd6e..536585b17ef 100644 --- a/memory/virtual.c +++ b/memory/virtual.c @@ -771,11 +771,17 @@ LPVOID WINAPI VirtualAlloc( if ((type & MEM_RESERVE) || !base) { - view_size = size + (base ? 0 : granularity_mask + 1); if (type & MEM_SYSTEM) - ptr = base; - else - ptr = (UINT)wine_anon_mmap( (LPVOID)base, view_size, VIRTUAL_GetUnixProt( vprot ), 0 ); + { + if (!(view = VIRTUAL_CreateView( base, size, VFLAG_VALLOC | VFLAG_SYSTEM, vprot, 0 ))) + { + SetLastError( ERROR_OUTOFMEMORY ); + return NULL; + } + return (LPVOID)base; + } + view_size = size + (base ? 0 : granularity_mask + 1); + ptr = (UINT)wine_anon_mmap( (LPVOID)base, view_size, VIRTUAL_GetUnixProt( vprot ), 0 ); if (ptr == (UINT)-1) { SetLastError( ERROR_OUTOFMEMORY ); @@ -803,9 +809,7 @@ LPVOID WINAPI VirtualAlloc( SetLastError( ERROR_INVALID_ADDRESS ); return NULL; } - if (!(view = VIRTUAL_CreateView( ptr, size, - VFLAG_VALLOC | ((type & MEM_SYSTEM) ? VFLAG_SYSTEM : 0), - vprot, 0 ))) + if (!(view = VIRTUAL_CreateView( ptr, size, VFLAG_VALLOC, vprot, 0 ))) { munmap( (void *)ptr, size ); SetLastError( ERROR_OUTOFMEMORY );