completely revert 46733
authorJérôme Gardou <jerome.gardou@reactos.org>
Sun, 11 Apr 2010 21:32:53 +0000 (21:32 +0000)
committerJérôme Gardou <jerome.gardou@reactos.org>
Sun, 11 Apr 2010 21:32:53 +0000 (21:32 +0000)
svn path=/branches/reactos-yarotows/; revision=46846

subsystems/win32/win32k/include/dc.h
subsystems/win32/win32k/objects/dclife.c

index 36ffef2..8578f8e 100644 (file)
@@ -176,9 +176,12 @@ DC_LockDc(HDC hdc)
         /* 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;
 }
@@ -189,8 +192,6 @@ DC_UnlockDc(PDC pdc)
 {
     if(pdc->dctype == DCTYPE_DIRECT)
     {
-        /* Release surface lock */
-        SURFACE_ShareUnlockSurface(pdc->dclevel.pSurface);
         /* Release PDEV lock */
         EngReleaseSemaphore(pdc->ppdev->hsemDevLock);
     }
index 02fc6c5..9e6b5b0 100644 (file)
@@ -377,8 +377,7 @@ ASSERT(pdc->rosdc.hGCClipRgn);
 
     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) ;