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 <chris.kcat(a)gmail.com>
> 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;
> }
>
>
>
> ------------------------------------------------------------------------
>
>