diff --git a/reactos/win32ss/gdi/eng/pdevobj.c b/reactos/win32ss/gdi/eng/pdevobj.c index 39d8bf95c93..214537a780b 100644 --- a/reactos/win32ss/gdi/eng/pdevobj.c +++ b/reactos/win32ss/gdi/eng/pdevobj.c @@ -60,11 +60,27 @@ PDEVOBJ_AllocPDEV() RtlZeroMemory(ppdev, sizeof(PDEVOBJ)); + ppdev->hsemDevLock = EngCreateSemaphore(); + if (ppdev->hsemDevLock == NULL) + { + ExFreePoolWithTag(ppdev, GDITAG_PDEV); + return NULL; + } + ppdev->cPdevRefs = 1; return ppdev; } +static +VOID +PDEVOBJ_vDeletePDEV( + PPDEVOBJ ppdev) +{ + EngDeleteSemaphore(ppdev->hsemDevLock); + ExFreePoolWithTag(ppdev, GDITAG_PDEV); +} + VOID NTAPI PDEVOBJ_vRelease(PPDEVOBJ ppdev) @@ -124,7 +140,7 @@ PDEVOBJ_vRelease(PPDEVOBJ ppdev) gppdevPrimary = NULL; /* Free it */ - ExFreePoolWithTag(ppdev, GDITAG_PDEV ); + PDEVOBJ_vDeletePDEV(ppdev); } /* Unlock loader */ @@ -323,7 +339,7 @@ EngpCreatePDEV( DPRINT1("Could not load display driver '%ls', '%ls'\n", pGraphicsDevice->pDiplayDrivers, pdm->dmDeviceName); - ExFreePoolWithTag(ppdev, GDITAG_PDEV); + PDEVOBJ_vRelease(ppdev); return NULL; } @@ -336,7 +352,6 @@ EngpCreatePDEV( ppdev->pfnMovePointer = EngMovePointer; ppdev->pGraphicsDevice = pGraphicsDevice; - ppdev->hsemDevLock = EngCreateSemaphore(); // Should we change the ative mode of pGraphicsDevice ? ppdev->pdmwDev = PDEVOBJ_pdmMatchDevMode(ppdev, pdm) ;