Regression in msvideo patch

Eric Pouech eric.pouech at wanadoo.fr
Mon Dec 30 08:36:13 CST 2002


> Here are the basic -debugmsg +msvideo logs. The ones with +relay are at:
> 
> http://www.cantoris.demon.co.uk/before-relay.log.bz2 (690,270 B)
> http://www.cantoris.demon.co.uk/after-relay.log.bz2 (1,476,695 B)
> 
> so as not to explode anyone's mailbox. :-) They will expand to about 300MB (!) 
> total.
thanx
does the attached patch fix your issue ?
A+

-- 
Eric Pouech
-------------- next part --------------
Index: dlls/msvideo/drawdib.c
===================================================================
RCS file: /home/cvs/cvsroot/wine/wine/dlls/msvideo/drawdib.c,v
retrieving revision 1.19
diff -u -r1.19 drawdib.c
--- dlls/msvideo/drawdib.c	15 Dec 2002 01:14:21 -0000	1.19
+++ dlls/msvideo/drawdib.c	30 Dec 2002 14:33:18 -0000
@@ -64,11 +64,11 @@
 {
     WINE_HDD*   hdd;
 
-    for (hdd = HDD_FirstHdd; hdd != NULL && hdd->hSelf != hdd; hdd = hdd->next);
+    for (hdd = HDD_FirstHdd; hdd != NULL && hdd->hSelf != hd; hdd = hdd->next);
     return hdd;
 }
 
-static DWORD HDD_HandleRef = 1;
+static DWORD HDD_HandleRef = 0x1000;
 
 /***********************************************************************
  *		DrawDibOpen		[MSVFW32.@]
@@ -80,7 +80,6 @@
     TRACE("(void)\n");
 	
     whdd = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(WINE_HDD));
-    TRACE("=> %p\n", whdd);
 
     while (MSVIDEO_GetHddPtr((HDRAWDIB)HDD_HandleRef) != NULL) HDD_HandleRef++;
     whdd->hSelf = (HDRAWDIB)HDD_HandleRef++;
@@ -88,6 +87,8 @@
     whdd->next = HDD_FirstHdd;
     HDD_FirstHdd = whdd;
 
+    TRACE("=> %p (%p)\n", whdd->hSelf, whdd);
+
     return whdd->hSelf;
 }
 
@@ -97,12 +98,22 @@
 BOOL VFWAPI DrawDibClose(HDRAWDIB hdd) 
 {
     WINE_HDD* whdd = MSVIDEO_GetHddPtr(hdd);
+    WINE_HDD** p;
 
     TRACE("(%p)\n", hdd);
 
     if (!whdd) return FALSE;
 
     if (whdd->begun) DrawDibEnd(hdd);
+
+    for (p = &HDD_FirstHdd; *p != NULL; p = &((*p)->next))
+    {
+        if (*p == whdd)
+        {
+            *p = whdd->next;
+            break;
+        }
+    }
 
     HeapFree(GetProcessHeap(), 0, whdd);
 


More information about the wine-devel mailing list