mirror of
https://github.com/reactos/reactos.git
synced 2025-02-23 17:05:46 +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:
parent
71ac07fc36
commit
f110853aaa
1 changed files with 18 additions and 3 deletions
|
@ -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) ;
|
||||
|
||||
|
|
Loading…
Reference in a new issue