Regression in CreateDIBSection

David Hammerton david at transgaming.com
Fri May 10 12:29:02 CDT 2002


Hmm,

Although that patch is correct, it seems that there is another bug - when
calling [Set|Get]DIBits we really should be locking the DIBSection so that it
coerces properly before the write/read. These use the DIBSection in GdiMod.

This patch fixes it.

David.

Changelog:
	- Lock/unlock (and hence maybe coerce) DIBSections into GdiMod during
the SetDIBits and GetDIBits functions, before actually accessing the X Pixmap.

Licence: MIT/X11

Files affected:
	graphics/x11drv/dib.c

Patch Against:
	ReWind CVS 10 may 2002


On Fri, 10 May 2002 17:22:43 +0200, Mehmet YASAR wrote:

|   Hi,
|  
|  the following patch incorporated in CVS may 3rd has broken BabyGammon
|  (you can get it at 
|  http://www.directfichiers.com/babygammon/BAFR100DOGT90.EXE )
|  
|  With it I have black background instead of the normal backgammon game.
|  If somebody could look at this ...
|  
|  Mehmet YASAR
|  
|  Extract from logs :
|  ....
|  08073078:Call 
|  user32.LoadImageA(00400000,0000006a,00000000,00000000,00000000,00002000) 
|  ret=00407f17
|  08073078:Call 
|  x11drv.CreateDIBSection(403844f4,403bb334,00000000,00000000,00000000,00000000,00000000) 
|  ret=407b4ac2
|  trace:bitmap:X11DRV_DIB_CreateDIBSection format (114,19), planes 1, bpp 
|  8, size 2204, colors 256 (RGB)
|  08073078:Call x11drv.GetDeviceCaps(403844f4,0000000c) ret=407b173b
|  08073078:Ret  x11drv.GetDeviceCaps() retval=00000010 ret=407b173b
|  08073078:Call x11drv.GetDeviceCaps(403844f4,0000000e) ret=407b173b
|  08073078:Ret  x11drv.GetDeviceCaps() retval=00000001 ret=407b173b
|  trace:bitmap:CreateBitmap 114x19, 65536 colors returning 00000870
|  trace:bitmap:X11DRV_DIB_DoProtectDIBSection Changed protection from 4 to 4
|  08073078:Ret  x11drv.CreateDIBSection() retval=00000870 ret=407b4ac2
|  ....
|  
|  
|  
|  
|  
|  
|  
|   --- Next Part --- 
|  
|  Index: wine/graphics/x11drv/dib.c
|  diff -u wine/graphics/x11drv/dib.c:1.91 wine/graphics/x11drv/dib.c:1.92
|  --- wine/graphics/x11drv/dib.c:1.91	Wed Apr 24 16:32:11 2002
|  +++ wine/graphics/x11drv/dib.c	Sat May  4 13:32:48 2002
|  @@ -5793,16 +5793,8 @@
|         InitializeCriticalSection(&(dib->lock));
|         if (VIRTUAL_SetFaultHandler(bm.bmBits, X11DRV_DIB_FaultHandler, (LPVOID)res))
|           {
|  -          if (section || offset)
|  -            {
|  -              X11DRV_DIB_DoProtectDIBSection( bmp, PAGE_READWRITE );
|  -              if (dib) dib->status = DIB_Status_AppMod;
|  -            }
|  -          else
|  -            {
|  -	      X11DRV_DIB_DoProtectDIBSection( bmp, PAGE_READONLY );
|  -	      if (dib) dib->status = DIB_Status_InSync;
|  -	    }
|  +          X11DRV_DIB_DoProtectDIBSection( bmp, PAGE_READWRITE );
|  +          if (dib) dib->status = DIB_Status_AppMod;
|           }
|       }
|   
|  
|  
|  
|  
|  
|  
|  

-- 
David Hammerton
programmer and support
TransGaming Technologies Inc.
http://www.transgaming.com
david at transgaming.com
-------------- next part --------------
A non-text attachment was scrubbed...
Name: protectset.diff
Type: application/x-unknown
Size: 1373 bytes
Desc: not available
Url : http://www.winehq.org/pipermail/wine-devel/attachments/20020510/87ffb359/protectset.bin


More information about the wine-devel mailing list