/* Internal functions *********************************************************/
-#if 1
#define DC_LockDc(hDC) \
((PDC) GDIOBJ_LockObj ((HGDIOBJ) hDC, GDI_OBJECT_TYPE_DC))
#define DC_UnlockDc(pDC) \
GDIOBJ_UnlockObjByPtr ((POBJ)pDC)
-#else
-
-VOID NTAPI EngAcquireSemaphoreShared(IN HSEMAPHORE hsem);
-
-PDC
-FORCEINLINE
-DC_LockDc(HDC hdc)
-{
- PDC pdc;
- pdc = GDIOBJ_LockObj(hdc, GDILoObjType_LO_DC_TYPE);
-
- /* Direct DC's need PDEV locking */
- if(pdc && pdc->dctype == DCTYPE_DIRECT)
- {
- /* Acquire shared PDEV lock */
- EngAcquireSemaphoreShared(pdc->ppdev->hsemDevLock);
-
- /* 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;
-}
-
-void
-FORCEINLINE
-DC_UnlockDc(PDC pdc)
-{
- if(pdc->dctype == DCTYPE_DIRECT)
- {
- /* Release PDEV lock */
- EngReleaseSemaphore(pdc->ppdev->hsemDevLock);
- }
-
- GDIOBJ_UnlockObjByPtr(&pdc->BaseObject);
-}
-#endif
-
extern PDC defaultDCstate;
ASSERT(cLocks >= 0);
if ((flags & BASEFLAG_READY_TO_DIE) && (cLocks == 0))
{
+ GDIOBJ_SetOwnership(hobj, PsGetCurrentProcess());
GDIOBJ_FreeObjByHandle(hobj, GDI_OBJECT_TYPE_DONTCARE);
}
return cLocks;
{
case 1:
psurfBmp->ppal = &gpalMono;
- gpalMono.BaseObject.ulShareCount++;
+ GDIOBJ_IncrementShareCount((POBJ)&gpalMono);
break;
case 4:
case 8:
break;
case 15:
psurfBmp->ppal = &gpalRGB555;
- gpalRGB555.BaseObject.ulShareCount++;
+ GDIOBJ_IncrementShareCount((POBJ)&gpalRGB555);
break;
case 16:
psurfBmp->ppal = &gpalRGB565;
- gpalRGB565.BaseObject.ulShareCount++;
- break;
+ GDIOBJ_IncrementShareCount((POBJ)&gpalRGB565);
case 24:
case 32:
psurfBmp->ppal = &gpalRGB;
- gpalRGB.BaseObject.ulShareCount++;
+ GDIOBJ_IncrementShareCount((POBJ)&gpalRGB);
break;
default:
DPRINT1("Could not determine palette for bit depth %u.\n", BitsPixel);
DCTYPE dctype,
PPDEVOBJ ppdev)
{
-#if 0
- if (dctype == DCTYPE_DIRECT)
- {
- /* Lock ppdev */
- EngAcquireSemaphoreShared(ppdev->hsemDevLock);
- }
-#endif
-
/* Setup some basic fields */
pdc->dctype = dctype;
pdc->ppdev = ppdev;
/* Lock them in good order */
if(pdc2)
{
- if((ULONG_PTR)pdc1->BaseObject.hHmgr >= (ULONG_PTR)pdc2->BaseObject.hHmgr)
+ if((ULONG_PTR)pdc1->ppdev->hsemDevLock >= (ULONG_PTR)pdc2->ppdev->hsemDevLock)
{
pdcFirst = pdc1;
prcFirst = &rc1;