mirror of
https://github.com/ApfelTeeSaft/reactos.git
synced 2026-08-28 19:26:16 +00:00
[WIN32K]
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:
@@ -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) ;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user