Alexandre Julliard : kernel32: Avoid getting the heap lock inside an exception handler block.

Alexandre Julliard julliard at winehq.org
Tue Sep 13 11:33:56 CDT 2016


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

Author: Alexandre Julliard <julliard at winehq.org>
Date:   Tue Sep 13 20:48:49 2016 +0900

kernel32: Avoid getting the heap lock inside an exception handler block.

In case of a caught exception the lock is not released.

Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 dlls/kernel32/heap.c | 12 ++++++------
 1 file changed, 6 insertions(+), 6 deletions(-)

diff --git a/dlls/kernel32/heap.c b/dlls/kernel32/heap.c
index 49cb027..6c64d57 100644
--- a/dlls/kernel32/heap.c
+++ b/dlls/kernel32/heap.c
@@ -557,7 +557,7 @@ HGLOBAL WINAPI GlobalHandle(
         /* GlobalAlloc with GMEM_MOVEABLE then magic test in HeapValidate  */
         /* will fail.                                                      */
         if (ISPOINTER(pmem)) {
-            if (HeapValidate( GetProcessHeap(), 0, pmem )) {
+            if (HeapValidate( GetProcessHeap(), HEAP_NO_SERIALIZE, pmem )) {
                 handle = (HGLOBAL)pmem;  /* valid fixed block */
                 break;
             }
@@ -569,8 +569,8 @@ HGLOBAL WINAPI GlobalHandle(
         maybe_intern = HANDLE_TO_INTERN( handle );
         if (maybe_intern->Magic == MAGIC_GLOBAL_USED) {
             test = maybe_intern->Pointer;
-            if (HeapValidate( GetProcessHeap(), 0, (const char *)test - HGLOBAL_STORAGE ) && /* obj(-handle) valid arena? */
-                HeapValidate( GetProcessHeap(), 0, maybe_intern ))  /* intern valid arena? */
+            if (HeapValidate( GetProcessHeap(), HEAP_NO_SERIALIZE, (const char *)test - HGLOBAL_STORAGE ) && /* obj(-handle) valid arena? */
+                HeapValidate( GetProcessHeap(), HEAP_NO_SERIALIZE, maybe_intern ))  /* intern valid arena? */
                 break;  /* valid moveable block */
         }
         handle = 0;
@@ -749,7 +749,7 @@ HGLOBAL WINAPI GlobalFree(HGLOBAL hmem)
         hreturned = 0;
         if(ISPOINTER(hmem)) /* POINTER */
         {
-            if(!HeapFree(GetProcessHeap(), 0, hmem))
+            if(!HeapFree(GetProcessHeap(), HEAP_NO_SERIALIZE, hmem))
             {
                 SetLastError(ERROR_INVALID_HANDLE);
                 hreturned = hmem;
@@ -769,9 +769,9 @@ HGLOBAL WINAPI GlobalFree(HGLOBAL hmem)
                 /*    SetLastError(ERROR_INVALID_HANDLE);  */
 
                 if(pintern->Pointer)
-                    if(!HeapFree(GetProcessHeap(), 0, (char *)(pintern->Pointer)-HGLOBAL_STORAGE))
+                    if(!HeapFree(GetProcessHeap(), HEAP_NO_SERIALIZE, (char *)(pintern->Pointer)-HGLOBAL_STORAGE))
                         hreturned=hmem;
-                if(!HeapFree(GetProcessHeap(), 0, pintern))
+                if(!HeapFree(GetProcessHeap(), HEAP_NO_SERIALIZE, pintern))
                     hreturned=hmem;
             }
             else




More information about the wine-cvs mailing list