DIB sync bug fix

Duane Clark dclark at akamail.com
Sun Jan 5 14:58:57 CST 2003


In the bitblt functions, if the source and destination DCs are the same 
DC, the call:
  X11DRV_UnlockDIBSection( physDevSrc, FALSE );
caused the DC to be labeled as "InSync" without committing the changes 
resulting from the bitblt.

This fixes bug 885.

Changelog:
	If bit/stretchblt source and destination DCs are the same,
	make sure the changes are committed before unlocking.

-------------- next part --------------
Index: graphics/x11drv/bitblt.c
===================================================================
RCS file: /home/wine/wine/graphics/x11drv/bitblt.c,v
retrieving revision 1.44
diff -u -r1.44 bitblt.c
--- graphics/x11drv/bitblt.c	25 Jun 2002 23:29:51 -0000	1.44
+++ graphics/x11drv/bitblt.c	5 Jan 2003 20:50:15 -0000
@@ -1608,13 +1608,15 @@
     }
 
     X11DRV_CoerceDIBSection( physDevDst, DIB_Status_GdiMod, FALSE );
-    X11DRV_CoerceDIBSection( physDevSrc, DIB_Status_GdiMod, FALSE );
+    if (physDevDst != physDevSrc)
+      X11DRV_CoerceDIBSection( physDevSrc, DIB_Status_GdiMod, FALSE );
 
     result = BITBLT_InternalStretchBlt( physDevDst, xDst, yDst, width, height,
                                         physDevSrc, xSrc, ySrc, width, height, rop );
 
 END:
-    X11DRV_UnlockDIBSection( physDevSrc, FALSE );
+    if (physDevDst != physDevSrc)
+      X11DRV_UnlockDIBSection( physDevSrc, FALSE );
     X11DRV_UnlockDIBSection( physDevDst, TRUE );
 
     return result;
@@ -1632,12 +1634,14 @@
     BOOL result;
 
     X11DRV_LockDIBSection( physDevDst, DIB_Status_GdiMod, FALSE );
-    X11DRV_LockDIBSection( physDevSrc, DIB_Status_GdiMod, FALSE );
+    if (physDevDst != physDevSrc)
+      X11DRV_LockDIBSection( physDevSrc, DIB_Status_GdiMod, FALSE );
 
     result = BITBLT_InternalStretchBlt( physDevDst, xDst, yDst, widthDst, heightDst,
                                         physDevSrc, xSrc, ySrc, widthSrc, heightSrc, rop );
 
-    X11DRV_UnlockDIBSection( physDevSrc, FALSE );
+    if (physDevDst != physDevSrc)
+      X11DRV_UnlockDIBSection( physDevSrc, FALSE );
     X11DRV_UnlockDIBSection( physDevDst, TRUE );
     return result;
 }


More information about the wine-patches mailing list