/* Acquire shared PDEV lock */
EngAcquireSemaphoreShared(pdc->ppdev->hsemDevLock);
- /* Assign Surface */
- pdc->dclevel.pSurface = PDEVOBJ_pSurface(pdc->ppdev);
-
+ /* Update Surface if needed */
+ if(pdc->dclevel.pSurface != pdc->ppdev->pSurface)
+ {
+ if(pdc->dclevel.pSurface) SURFACE_ShareUnlockSurface(pdc->dclevel.pSurface);
+ pdc->dclevel.pSurface = PDEVOBJ_pSurface(pdc->ppdev);
+ }
}
return pdc;
}
{
if(pdc->dctype == DCTYPE_DIRECT)
{
- /* Release surface lock */
- SURFACE_ShareUnlockSurface(pdc->dclevel.pSurface);
/* Release PDEV lock */
EngReleaseSemaphore(pdc->ppdev->hsemDevLock);
}
PATH_Delete(pdc->dclevel.hPath);
- /* Ideally, no DC should hold a lock on a surface when being deleted */
- if(pdc->dclevel.pSurface && pdc->dctype != DCTYPE_DIRECT)
+ if(pdc->dclevel.pSurface)
SURFACE_ShareUnlockSurface(pdc->dclevel.pSurface);
PDEVOBJ_vRelease(pdc->ppdev) ;