Allocate the device lock semaphore for a PDEVOBJ in PDEVOBJ_AllocPDEV and implement PDEVOBJ_vDeletePDEV. Fixes a PDEVOBJ leak, found by Thomas and Giannis.

svn path=/trunk/; revision=67060
This commit is contained in:
Timo Kreuzer 2015-04-05 12:45:01 +00:00
parent 71ac07fc36
commit f110853aaa

View file

@ -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) ;