mirror of
https://github.com/reactos/reactos.git
synced 2025-08-05 17:52:56 +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));
|
RtlZeroMemory(ppdev, sizeof(PDEVOBJ));
|
||||||
|
|
||||||
|
ppdev->hsemDevLock = EngCreateSemaphore();
|
||||||
|
if (ppdev->hsemDevLock == NULL)
|
||||||
|
{
|
||||||
|
ExFreePoolWithTag(ppdev, GDITAG_PDEV);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
ppdev->cPdevRefs = 1;
|
ppdev->cPdevRefs = 1;
|
||||||
|
|
||||||
return ppdev;
|
return ppdev;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static
|
||||||
|
VOID
|
||||||
|
PDEVOBJ_vDeletePDEV(
|
||||||
|
PPDEVOBJ ppdev)
|
||||||
|
{
|
||||||
|
EngDeleteSemaphore(ppdev->hsemDevLock);
|
||||||
|
ExFreePoolWithTag(ppdev, GDITAG_PDEV);
|
||||||
|
}
|
||||||
|
|
||||||
VOID
|
VOID
|
||||||
NTAPI
|
NTAPI
|
||||||
PDEVOBJ_vRelease(PPDEVOBJ ppdev)
|
PDEVOBJ_vRelease(PPDEVOBJ ppdev)
|
||||||
|
@ -124,7 +140,7 @@ PDEVOBJ_vRelease(PPDEVOBJ ppdev)
|
||||||
gppdevPrimary = NULL;
|
gppdevPrimary = NULL;
|
||||||
|
|
||||||
/* Free it */
|
/* Free it */
|
||||||
ExFreePoolWithTag(ppdev, GDITAG_PDEV );
|
PDEVOBJ_vDeletePDEV(ppdev);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Unlock loader */
|
/* Unlock loader */
|
||||||
|
@ -323,7 +339,7 @@ EngpCreatePDEV(
|
||||||
DPRINT1("Could not load display driver '%ls', '%ls'\n",
|
DPRINT1("Could not load display driver '%ls', '%ls'\n",
|
||||||
pGraphicsDevice->pDiplayDrivers,
|
pGraphicsDevice->pDiplayDrivers,
|
||||||
pdm->dmDeviceName);
|
pdm->dmDeviceName);
|
||||||
ExFreePoolWithTag(ppdev, GDITAG_PDEV);
|
PDEVOBJ_vRelease(ppdev);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -336,7 +352,6 @@ EngpCreatePDEV(
|
||||||
ppdev->pfnMovePointer = EngMovePointer;
|
ppdev->pfnMovePointer = EngMovePointer;
|
||||||
|
|
||||||
ppdev->pGraphicsDevice = pGraphicsDevice;
|
ppdev->pGraphicsDevice = pGraphicsDevice;
|
||||||
ppdev->hsemDevLock = EngCreateSemaphore();
|
|
||||||
// Should we change the ative mode of pGraphicsDevice ?
|
// Should we change the ative mode of pGraphicsDevice ?
|
||||||
ppdev->pdmwDev = PDEVOBJ_pdmMatchDevMode(ppdev, pdm) ;
|
ppdev->pdmwDev = PDEVOBJ_pdmMatchDevMode(ppdev, pdm) ;
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue