[ros-diffs] [dgorbachev] 41779: If exception occurs, leave critical section. Bug #4431.

dgorbachev at svn.reactos.org dgorbachev at svn.reactos.org
Sun Jul 5 16:08:10 CEST 2009


Author: dgorbachev
Date: Sun Jul  5 18:08:10 2009
New Revision: 41779

URL: http://svn.reactos.org/svn/reactos?rev=41779&view=rev
Log:
If exception occurs, leave critical section. Bug #4431.

Modified:
    trunk/reactos/subsystems/win32/win32k/ntuser/painting.c

Modified: trunk/reactos/subsystems/win32/win32k/ntuser/painting.c
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/subsystems/win32/win32k/ntuser/painting.c?rev=41779&r1=41778&r2=41779&view=diff
==============================================================================
--- trunk/reactos/subsystems/win32/win32k/ntuser/painting.c [iso-8859-1] (original)
+++ trunk/reactos/subsystems/win32/win32k/ntuser/painting.c [iso-8859-1] Sun Jul  5 18:08:10 2009
@@ -1813,6 +1813,7 @@
 	  /* FIXME: Draw the Icon when pWnd == NULL but  hIcon is valid */
 	  if (pWnd != NULL)
 		UserDrawSysMenuButton(pWnd, hMemDc, &r, FALSE);
+
       r.left += IconWidth;
       r.top --;
    }
@@ -1848,8 +1849,8 @@
 	  /* FIXME: hFont isn't handled */
       if (str)
          UserDrawCaptionText(hMemDc, str, &r, uFlags);
-	  else if (pWnd != NULL)
-	     UserDrawCaptionText(hMemDc, &pWnd->Wnd->WindowName, &r, uFlags);
+      else if (pWnd != NULL)
+         UserDrawCaptionText(hMemDc, &pWnd->Wnd->WindowName, &r, uFlags);
    }
 
    if(!NtGdiBitBlt(hDc, lpRc->left, lpRc->top,
@@ -1902,9 +1903,10 @@
    UINT uFlags)
 {
    PWINDOW_OBJECT pWnd = NULL;
+   UNICODE_STRING SafeStr = {0};
+   NTSTATUS Status = STATUS_SUCCESS;
    RECTL SafeRect;
-   UNICODE_STRING SafeStr = {0};
-   BOOL Ret = FALSE;
+   BOOL Ret;
 
    UserEnterExclusive();
 
@@ -1930,16 +1932,25 @@
                            SafeStr.Length,
                             sizeof(WCHAR));
          }
-         Ret = UserDrawCaption(pWnd, hDC, &SafeRect, hFont, hIcon, &SafeStr, uFlags);
-      }
-      else
-         Ret = UserDrawCaption(pWnd, hDC, &SafeRect, hFont, hIcon, NULL, uFlags);
+      }
    }
    _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
    {
-      SetLastNtError(_SEH2_GetExceptionCode());
+      Status = _SEH2_GetExceptionCode();
    }
    _SEH2_END;
+
+   if (Status != STATUS_SUCCESS)
+   {
+      SetLastNtError(Status);
+      UserLeave();
+      return FALSE;
+   }
+
+   if (str != NULL)
+      Ret = UserDrawCaption(pWnd, hDC, &SafeRect, hFont, hIcon, &SafeStr, uFlags);
+   else
+      Ret = UserDrawCaption(pWnd, hDC, &SafeRect, hFont, hIcon, NULL, uFlags);
 
    UserLeave();
    return Ret;



More information about the Ros-diffs mailing list