Nikolay Sivov : xmllite: Don't release reader input reference on failure, as newer versions do.

Alexandre Julliard julliard at winehq.org
Tue Jan 26 11:21:07 CST 2010


Module: wine
Branch: master
Commit: 5864234051b12ea3f84541096b5c9fcefd732ff8
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=5864234051b12ea3f84541096b5c9fcefd732ff8

Author: Nikolay Sivov <bunglehead at 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;




More information about the wine-cvs mailing list