From 76085ba9824b9b4ac80dc6af201e47ce88df585c Mon Sep 17 00:00:00 2001 From: =?utf8?q?J=C3=A9r=C3=B4me=20Gardou?= Date: Fri, 26 Mar 2010 16:17:12 +0000 Subject: [PATCH] [WIN32K] Lock PDC with pDevObj semaphore too. svn path=/branches/reactos-yarotows/; revision=46470 --- subsystems/win32/win32k/include/dc.h | 6 +++--- subsystems/win32/win32k/objects/dclife.c | 5 ++++- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/subsystems/win32/win32k/include/dc.h b/subsystems/win32/win32k/include/dc.h index ebce872b0c2..030f2dbbca7 100644 --- a/subsystems/win32/win32k/include/dc.h +++ b/subsystems/win32/win32k/include/dc.h @@ -167,8 +167,8 @@ FORCEINLINE DC_LockDc(HDC hdc) { PDC pdc; - pdc = GDIOBJ_LockObj(hdc, GDI_OBJECT_TYPE_DC); -// EngAcquireSemaphoreShared(pdc->ppdev->hsemDevLock); + pdc = GDIOBJ_LockObj(hdc, GDILoObjType_LO_DC_TYPE); + if(pdc) EngAcquireSemaphoreShared(pdc->ppdev->hsemDevLock); return pdc; } @@ -176,7 +176,7 @@ void FORCEINLINE DC_UnlockDc(PDC pdc) { -// EngReleaseSemaphore(pdc->ppdev->hsemDevLock); + EngReleaseSemaphore(pdc->ppdev->hsemDevLock); GDIOBJ_UnlockObjByPtr(&pdc->BaseObject); } diff --git a/subsystems/win32/win32k/objects/dclife.c b/subsystems/win32/win32k/objects/dclife.c index 636d20db514..bf400824734 100644 --- a/subsystems/win32/win32k/objects/dclife.c +++ b/subsystems/win32/win32k/objects/dclife.c @@ -117,6 +117,8 @@ DC_vInitDc( DCTYPE dctype, PPDEVOBJ ppdev) { + /* Lock ppdev */ + EngAcquireSemaphoreShared(ppdev->hsemDevLock); /* Setup some basic fields */ pdc->dctype = dctype; @@ -477,6 +479,7 @@ GreOpenDCW( } hdc = pdc->BaseObject.hHmgr; + /* Lock ppdev and initialize the new DC */ DC_vInitDc(pdc, iType, ppdev); /* FIXME: HACK! */ DC_InitHack(pdc); @@ -638,7 +641,7 @@ NtGdiCreateCompatibleDC(HDC hdc) } hdcNew = pdcNew->BaseObject.hHmgr; - /* Initialize the new DC */ + /* Lock ppdev and initialize the new DC */ DC_vInitDc(pdcNew, DCTYPE_MEMORY, ppdev); /* FIXME: HACK! */ DC_InitHack(pdcNew); -- 2.17.1