[4/9] msxml3: Implement IXMLDOMNodeList::QueryInterface(IEnumVARIANT).

Nikolay Sivov bunglehead at gmail.com
Tue Jul 5 11:23:27 CDT 2011


On Tue, Jul 5, 2011 at 8:11 PM, Adam Martinson
<amartinson at codeweavers.com> wrote:
> ---
>  dlls/msxml3/nodelist.c  |   33 ++++++++++++++++++++++++++++++++-
>  dlls/msxml3/selection.c |   34 ++++++++++++++++++++++++++++++++--
>  2 files changed, 64 insertions(+), 3 deletions(-)
>
>

+    else if ( IsEqualGUID( riid, &IID_IEnumVARIANT ) )
+    {
+        if (!This->enumv &&
+            (This->enumv = create_nodelist_enum(&This->IXMLDOMNodeList_iface)))
+                IXMLDOMNodeList_Release(iface); /*
create_nodelist_enum() adds a ref, and we don't here. */
+
+        if (!This->enumv)
+        {
+            *ppvObject = NULL;
+            return E_OUTOFMEMORY;
+        }
+
+        IEnumVARIANT_AddRef(This->enumv);
+        *ppvObject = This->enumv;
+        return S_OK;
+    }

Shouldn't this->enumv be protected somehow to work with multiple
threads? I know that so called FreeThreaded* thing is only reported to
be supported, but still. Maybe something like pointer exchange call
will work.



More information about the wine-devel mailing list