Hi, this patch caused regression in TES IV: Oblivion, now it can't run, here is output:

fixme:devenum:DEVENUM_ICreateDevEnum_CreateClassEnumerator Category {cc7bfb41-f175-11d1-a392-00e0291f3959} not found fixme:devenum:DEVENUM_ICreateDevEnum_CreateClassEnumerator Category {cc7bfb46-f175-11d1-a392-00e0291f3959} not found fixme:devenum:DEVENUM_ICreateDevEnum_CreateClassEnumerator Category {cc7bfb41-f175-11d1-a392-00e0291f3959} not found fixme:devenum:DEVENUM_ICreateDevEnum_CreateClassEnumerator Category {cc7bfb46-f175-11d1-a392-00e0291f3959} not found wine: Unhandled page fault on read access to 0xffffffea at address 0x7bfd278f (thread 0009), starting debugger... Unhandled exception: page fault on read access to 0xffffffea in 32-bit code (0x7bfd278f).
Register dump:
 CS:0073 SS:007b DS:007b ES:007b FS:0033 GS:003b
EIP:7bfd278f ESP:0034f098 EBP:0034f1d0 EFLAGS:00010282( - 00 - RIS1)
 EAX:00000001 EBX:7bffec00 ECX:0034f198 EDX:ffffffea
 ESI:80004005 EDI:00000001
Stack dump:
0x0034f098:  115cc680 00000001 0034f198 0034f19c
0x0034f0a8:  00000000 00000001 00000001 0034f150
0x0034f0b8:  00000000 00000000 00000000 00000000
0x0034f0c8:  00000000 00000000 00000000 00000000
0x0034f0d8:  0034f108 7efa09be 7bff527c 0034f19c
0x0034f0e8:  0034f198 0034f1ac 0034f1a8 00000010
Backtrace:
=>1 0x7bfd278f GraphBuilder_RenderFile+0x66f(iface=0x115cb968, lpcwstrFile=0x34f3f0, lpcwstrPlayList=0x0) [/usr/src/wine/dlls/q uartz/filtergraph.c:1094] in quartz (0x0034f1d0)
  2 0x0069302b in oblivion (+0x29302b) (0x00000008)
  3 0x00000000 (0x00000000)
0x7bfd278f GraphBuilder_RenderFile+0x66f [/usr/src/wine/dlls/quartz/filtergraph.c:1094] in quartz: movl 0x0(%edx),%eax
1094            IBaseFilter_Release(psplitter);
Modules:
Module  Address                 Debug info      Name (109 modules)
PE      400000-b59000   Export          oblivion
PE      b60000-daf000   Deferred        d3dx9_27
PE      18000000-18068000       Deferred        binkw32
PE      70000000-700b2000       Deferred        dinput8
ELF     7b2de000-7b2f2000       Deferred        avicap32<elf>
  \-PE  7b2e0000-7b2f2000       \               avicap32
ELF     7b2f2000-7b38b000       Deferred        oleaut32<elf>
  \-PE  7b300000-7b38b000       \               oleaut32
ELF     7bf00000-7bf03000       Deferred        <wine-loader>
ELF     7bf81000-7bfa8000       Deferred        msvfw32<elf>
  \-PE  7bf90000-7bfa8000       \               msvfw32
ELF     7bfa8000-7c000000       Dwarf           quartz<elf>
  \-PE  7bfb0000-7c000000       \               quartz
ELF     7c4b4000-7c4bf000       Deferred        libgcc_s.so.1
ELF     7c5a4000-7c634000       Deferred        libglu.so.1
ELF     7c634000-7c653000       Deferred        devenum<elf>
  \-PE  7c640000-7c653000       \               devenum
ELF     7c653000-7c70d000       Deferred        wined3d<elf>
  \-PE  7c660000-7c70d000       \               wined3d
ELF     7c70d000-7c737000       Deferred        d3d9<elf>
  \-PE  7c710000-7c737000       \               d3d9
ELF     7c857000-7c86b000       Deferred        winejoystick<elf>
  \-PE  7c860000-7c86b000       \               winejoystick
ELF     7c86b000-7c882000       Deferred        cfgmgr32<elf>
  \-PE  7c870000-7c882000       \               cfgmgr32
ELF     7c882000-7c8de000       Deferred        setupapi<elf>
  \-PE  7c890000-7c8de000       \               setupapi
ELF     7c8de000-7c8f2000       Deferred        hid<elf>
  \-PE  7c8e0000-7c8f2000       \               hid
ELF     7c9ed000-7caae000       Deferred        libasound.so.2
ELF     7caae000-7cad9000       Deferred        winealsa<elf>
  \-PE  7cac0000-7cad9000       \               winealsa
ELF     7cad9000-7cb0b000       Deferred        uxtheme<elf>
  \-PE  7cae0000-7cb0b000       \               uxtheme
ELF     7cd9e000-7cdb3000       Deferred        midimap<elf>
  \-PE  7cda0000-7cdb3000       \               midimap
ELF     7cdb3000-7cdb8000       Deferred        libxfixes.so.3
ELF     7cdbd000-7cdd5000       Deferred        msacm32<elf>
  \-PE  7cdc0000-7cdd5000       \               msacm32
ELF     7cdd7000-7cdda000       Deferred        libxinerama.so.1
ELF     7cddd000-7cdf9000       Deferred        imm32<elf>
  \-PE  7cde0000-7cdf9000       \               imm32
ELF     7d7a3000-7d7a5000       Deferred        libnvidia-tls.so.1
ELF     7d7a5000-7e116000       Deferred        libglcore.so.1
ELF     7e116000-7e1aa000       Deferred        libgl.so.1
ELF     7e1aa000-7e1af000       Deferred        libxdmcp.so.6
ELF     7e1af000-7e1b2000       Deferred        libxau.so.6
ELF     7e1b2000-7e29e000       Deferred        libx11.so.6
ELF     7e29e000-7e2ac000       Deferred        libxext.so.6
ELF     7e2ac000-7e2b1000       Deferred        libxxf86vm.so.1
ELF     7e2b1000-7e2c9000       Deferred        libice.so.6
ELF     7e2c9000-7e2d2000       Deferred        libsm.so.6
ELF     7e2d3000-7e2dc000       Deferred        libxcursor.so.1
ELF     7e2dc000-7e2df000       Deferred        libxrandr.so.2
ELF     7e2df000-7e2e7000       Deferred        libxrender.so.1
ELF     7e2f1000-7e37f000       Deferred        winex11<elf>
  \-PE  7e300000-7e37f000       \               winex11
ELF     7e3fb000-7e41b000       Deferred        libexpat.so.1
ELF     7e41b000-7e446000       Deferred        libfontconfig.so.1
ELF     7e446000-7e45a000       Deferred        libz.so.1
ELF     7e45a000-7e4c4000       Deferred        libfreetype.so.6
ELF     7e4e3000-7e50f000       Deferred        ws2_32<elf>
  \-PE  7e4f0000-7e50f000       \               ws2_32
ELF     7e50f000-7e529000       Deferred        wsock32<elf>
  \-PE  7e520000-7e529000       \               wsock32
ELF     7e529000-7e58d000       Deferred        msvcrt<elf>
  \-PE  7e540000-7e58d000       \               msvcrt
ELF     7e58d000-7e5a1000       Deferred        lz32<elf>
  \-PE  7e590000-7e5a1000       \               lz32
ELF     7e5a1000-7e5f9000       Deferred        shlwapi<elf>
  \-PE  7e5b0000-7e5f9000       \               shlwapi
ELF     7e5f9000-7e6ee000       Deferred        shell32<elf>
  \-PE  7e610000-7e6ee000       \               shell32
ELF     7e6ee000-7e701000       Deferred        libresolv.so.2
ELF     7e707000-7e720000       Deferred        version<elf>
  \-PE  7e710000-7e720000       \               version
ELF     7e720000-7e73e000       Deferred        iphlpapi<elf>
  \-PE  7e730000-7e73e000       \               iphlpapi
ELF     7e73e000-7e793000       Deferred        rpcrt4<elf>
  \-PE  7e750000-7e793000       \               rpcrt4
ELF     7e793000-7e82c000       Deferred        ole32<elf>
  \-PE  7e7a0000-7e82c000       \               ole32
ELF     7e82c000-7e875000       Deferred        dsound<elf>
  \-PE  7e830000-7e875000       \               dsound
ELF     7e875000-7e903000       Deferred        winmm<elf>
  \-PE  7e880000-7e903000       \               winmm
ELF     7e903000-7e949000       Deferred        advapi32<elf>
  \-PE  7e910000-7e949000       \               advapi32
ELF     7e949000-7e9dc000       Deferred        gdi32<elf>
  \-PE  7e960000-7e9dc000       \               gdi32
ELF     7e9dc000-7eb16000       Deferred        user32<elf>
  \-PE  7ea00000-7eb16000       \               user32
ELF     7eb16000-7ebd6000       Deferred        comctl32<elf>
  \-PE  7eb20000-7ebd6000       \               comctl32
ELF     7edd6000-7eefc000       Deferred        kernel32<elf>
  \-PE  7edf0000-7eefc000       \               kernel32
ELF     7eefc000-7ef07000       Deferred        libnss_files.so.2
ELF     7ef07000-7ef11000       Deferred        libnss_nis.so.2
ELF     7ef11000-7ef27000       Deferred        libnsl.so.1
ELF     7ef27000-7ef4c000       Deferred        libm.so.6
ELF     7ef6b000-7f000000       Deferred        ntdll<elf>
  \-PE  7ef80000-7f000000       \               ntdll
ELF     b7cb6000-b7cba000       Deferred        libdl.so.2
ELF     b7cba000-b7dec000       Deferred        libc.so.6
ELF     b7dec000-b7dfe000       Deferred        libpthread.so.0
ELF     b7e11000-b7e15000       Deferred        iso8859-2.so
ELF     b7e15000-b7e1e000       Deferred        libnss_compat.so.2
ELF     b7e1e000-b7f2f000       Deferred        libwine.so.1
ELF     b7f31000-b7f48000       Deferred        ld-linux.so.2
Threads:
process  tid      prio (all id:s are in hex)
0000000a
        0000000c    0
        0000000b    0
00000008 (D) G:\usr\games\oblivion\Oblivion.exe
        00000010    2
        0000000f   -1
        0000000e   -1
        0000000d   15
        00000009    0 <==

Mirek

Chris Robinson napsal(a):

------------------------------------------------------------------------

From 427782e216badd48afc917c85682bc5a1954b24b Mon Sep 17 00:00:00 2001
From: Chris Robinson <[EMAIL PROTECTED]>
Date: Wed, 14 Feb 2007 11:27:26 -0800
Subject: [PATCH] quartz: Return proper error codes from GraphBuilder_RenderFile

---
 dlls/quartz/filtergraph.c |   82 +++++++++++++++++++++++----------------------
 1 files changed, 42 insertions(+), 40 deletions(-)

diff --git a/dlls/quartz/filtergraph.c b/dlls/quartz/filtergraph.c
index 8b38a3b..a3db8dd 100644
--- a/dlls/quartz/filtergraph.c
+++ b/dlls/quartz/filtergraph.c
@@ -961,9 +961,9 @@ static HRESULT WINAPI GraphBuilder_RenderFile(IGraphBuilder 
*iface,
     IEnumPins* penumpins;
     ULONG pin;
     HRESULT hr;
-    IEnumMoniker* pEnumMoniker;
+    IEnumMoniker* pEnumMoniker = NULL;
     GUID tab[2];
-    IPin** ppins;
+    IPin** ppins = NULL;
     ULONG nb;
     IMoniker* pMoniker;
     IFileSourceFilter* pfile = NULL;
@@ -972,6 +972,9 @@ static HRESULT WINAPI GraphBuilder_RenderFile(IGraphBuilder 
*iface,
TRACE("(%p/%p)->(%s, %s)\n", This, iface, debugstr_w(lpcwstrFile), debugstr_w(lpcwstrPlayList)); + if (lpcwstrPlayList != NULL)
+        return E_INVALIDARG;
+
     hr = IGraphBuilder_AddSourceFilter(iface, lpcwstrFile, string, &preader);
/* Retrieve file media type */
@@ -982,6 +985,13 @@ static HRESULT WINAPI 
GraphBuilder_RenderFile(IGraphBuilder *iface,
         IFileSourceFilter_Release(pfile);
     }
+ if (SUCCEEDED(hr))
+        hr = IBaseFilter_EnumPins(preader, &penumpins);
+    if (SUCCEEDED(hr)) {
+        hr = IEnumPins_Next(penumpins, 1, &ppinreader, &pin);
+        IEnumPins_Release(penumpins);
+    }
+
     if (SUCCEEDED(hr)) {
         tab[0] = mt.majortype;
         tab[1] = mt.subtype;
@@ -990,6 +1000,8 @@ static HRESULT WINAPI 
GraphBuilder_RenderFile(IGraphBuilder *iface,
if (FAILED(hr))
     {
+        if (pEnumMoniker)
+            IEnumMoniker_Release(pEnumMoniker);
         if (preader) {
              IGraphBuilder_RemoveFilter(iface, preader);
              IBaseFilter_Release(preader);
@@ -1019,65 +1031,49 @@ static HRESULT WINAPI 
GraphBuilder_RenderFile(IGraphBuilder *iface,
         hr = IGraphBuilder_AddFilter(iface, psplitter, NULL);
         if (FAILED(hr)) {
             ERR("Unable add filter (%x)\n", hr);
-            return hr;
+            IBaseFilter_Release(psplitter);
+            continue;
         }
/* Connect file source and splitter filters together */
         /* Make the splitter analyze incoming data */
-        hr = IBaseFilter_EnumPins(preader, &penumpins);
-        if (FAILED(hr)) {
-            ERR("Enumpins (%x)\n", hr);
-            return hr;
-        }
-        hr = IEnumPins_Next(penumpins, 1, &ppinreader, &pin);
-        if (FAILED(hr)) {
-            ERR("Next (%x)\n", hr);
-            return hr;
-        }
-        if (pin == 0) {
-            ERR("No Pin\n");
-            return E_FAIL;
-        }
-        IEnumPins_Release(penumpins);
hr = IBaseFilter_EnumPins(psplitter, &penumpins);
-        if (FAILED(hr)) {
-            ERR("Splitter Enumpins (%x)\n", hr);
-            return hr;
-        }
-        hr = IEnumPins_Next(penumpins, 1, &ppinsplitter, &pin);
-        if (FAILED(hr)) {
-            ERR("Next (%x)\n", hr);
-            return hr;
-        }
-        if (pin == 0) {
-            ERR("No Pin\n");
-            return E_FAIL;
+        if (SUCCEEDED(hr)) {
+            hr = IEnumPins_Next(penumpins, 1, &ppinsplitter, &pin);
+            IEnumPins_Release(penumpins);
         }
-        IEnumPins_Release(penumpins);
- hr = IPin_Connect(ppinreader, ppinsplitter, NULL);
+        if (SUCCEEDED(hr))
+            hr = IPin_Connect(ppinreader, ppinsplitter, NULL);
         if (SUCCEEDED(hr)) {
             /* Make sure there's some output pins in the filter */
             hr = GetInternalConnections(psplitter, ppinsplitter, &ppins, &nb);
-            if(SUCCEEDED(hr)) {
+            if (SUCCEEDED(hr)) {
                 if(nb > 0) {
                     TRACE("Successfully connected to filter\n");
                     break;
                 }
                 CoTaskMemFree(ppins);
                 ppins = NULL;
-                TRACE("No output pins found in filter\n");
             }
-            IBaseFilter_Release(ppinsplitter);
-            ppinsplitter = NULL;
+
+            TRACE("No output pins found in filter\n");
+            hr = VFW_E_CANNOT_RENDER;
         }
+
+        IPin_Release(ppinsplitter);
+        ppinsplitter = NULL;
+        IGraphBuilder_RemoveFilter(iface, psplitter);
+        IBaseFilter_Release(psplitter);
+        ppinsplitter = NULL;
+
         TRACE("Cannot connect to filter (%x), trying next one\n", hr);
-        hr = E_FAIL;
     }
/* Render all output pin of the splitter by calling IGraphBuilder_Render on each of them */
     if (SUCCEEDED(hr)) {
+        int partial = 0;
         int i;
         TRACE("pins to consider: %d\n", nb);
         for(i = 0; i < nb; i++) {
@@ -1085,13 +1081,19 @@ static HRESULT WINAPI 
GraphBuilder_RenderFile(IGraphBuilder *iface,
             hr = IGraphBuilder_Render(iface, ppins[i]);
             if (FAILED(hr)) {
                 ERR("Cannot render pin %p (%x)\n", ppins[i], hr);
-                /* FIXME: We should clean created things properly */
-                break;
+                partial = 1;
             }
+            IPin_Release(ppins[i]);
         }
         CoTaskMemFree(ppins);
+
+        hr = (partial ? VFW_S_PARTIAL_RENDER : S_OK);
     }
- +
+    if (psplitter)
+        IBaseFilter_Release(psplitter);
+    IBaseFilter_Release(preader);
+
     return hr;
 }

------------------------------------------------------------------------




Reply via email to