[WIN32K] Don't call IntIsFontRenderingEnabled() while holding an exclusive GDI object...
authorTimo Kreuzer <timo.kreuzer@reactos.org>
Thu, 17 Aug 2017 09:08:57 +0000 (09:08 +0000)
committerTimo Kreuzer <timo.kreuzer@reactos.org>
Thu, 17 Aug 2017 09:08:57 +0000 (09:08 +0000)
Should fix GUI hangs.

svn path=/trunk/; revision=75582

reactos/win32ss/gdi/ntgdi/freetype.c

index 0c8fbdf..485f097 100644 (file)
@@ -5111,6 +5111,10 @@ GreExtTextOutW(
         return FALSE;
     }
 
         return FALSE;
     }
 
+    /* NOTE: This function locks the screen DC, so it must never be called
+       with a DC already locked */
+    Render = IntIsFontRenderingEnabled();
+
     // TODO: Write test-cases to exactly match real Windows in different
     // bad parameters (e.g. does Windows check the DC or the RECT first?).
     dc = DC_LockDc(hDC);
     // TODO: Write test-cases to exactly match real Windows in different
     // bad parameters (e.g. does Windows check the DC or the RECT first?).
     dc = DC_LockDc(hDC);
@@ -5238,7 +5242,6 @@ GreExtTextOutW(
     EmuBold = (plf->lfWeight >= FW_BOLD && FontGDI->OriginalWeight <= FW_NORMAL);
     EmuItalic = (plf->lfItalic && !FontGDI->OriginalItalic);
 
     EmuBold = (plf->lfWeight >= FW_BOLD && FontGDI->OriginalWeight <= FW_NORMAL);
     EmuItalic = (plf->lfItalic && !FontGDI->OriginalItalic);
 
-    Render = IntIsFontRenderingEnabled();
     if (Render)
         RenderMode = IntGetFontRenderMode(plf);
     else
     if (Render)
         RenderMode = IntGetFontRenderMode(plf);
     else