Module: wine Branch: master Commit: 5864234051b12ea3f84541096b5c9fcefd732ff8 URL: http://source.winehq.org/git/wine.git/?a=commit;h=5864234051b12ea3f84541096b...
Author: Nikolay Sivov bunglehead@gmail.com Date: Mon Jan 25 22:37:59 2010 +0300
xmllite: Don't release reader input reference on failure, as newer versions do.
---
dlls/xmllite/reader.c | 15 +++------------ dlls/xmllite/tests/reader.c | 4 +++- 2 files changed, 6 insertions(+), 13 deletions(-)
diff --git a/dlls/xmllite/reader.c b/dlls/xmllite/reader.c index 89dcf1d..e08e8fb 100644 --- a/dlls/xmllite/reader.c +++ b/dlls/xmllite/reader.c @@ -103,11 +103,8 @@ static ULONG WINAPI xmlreader_Release(IXmlReader *iface) ref = InterlockedDecrement(&This->ref); if (ref == 0) { - if (This->input) - { - IUnknown_Release(This->stream); - IUnknown_Release(This->input); - } + if (This->input) IUnknown_Release(This->input); + if (This->stream) IUnknown_Release(This->stream); HeapFree(GetProcessHeap(), 0, This); }
@@ -154,13 +151,7 @@ static HRESULT WINAPI xmlreader_SetInput(IXmlReader* iface, IUnknown *input)
/* set stream for supplied IXmlReaderInput */ hr = xmlreaderinput_query_for_stream(This->input, (void**)&This->stream); - if (hr != S_OK) - { - /* IXmlReaderInput doesn't provide streaming interface */ - IUnknown_Release(This->input); - This->input = NULL; - } - else + if (hr == S_OK) This->state = XmlReadState_Initial;
return hr; diff --git a/dlls/xmllite/tests/reader.c b/dlls/xmllite/tests/reader.c index c594d48..4636d35 100644 --- a/dlls/xmllite/tests/reader.c +++ b/dlls/xmllite/tests/reader.c @@ -440,6 +440,7 @@ static void test_readerinput(void) IUnknown_Release(reader_input);
IUnknown_Release(reader_input); + IUnknown_Release(reader_input); IStream_Release(stream);
/* test input interface selection sequence */ @@ -479,7 +480,8 @@ static void test_readerinput(void) IUnknown_Release(input);
ref = IUnknown_AddRef(reader_input); - ok(ref == 2, "Expected 2, got %d\n", ref); + ok(ref == 3 || broken(ref == 2) /* versions 1.0.x and 1.1.x - XP, Vista */, + "Expected 3, got %d\n", ref); IUnknown_Release(reader_input); /* repeat another time, no check or caching here */ input_iids.count = 0;