Re: [4/9] msxml3: Implement IXMLDOMNodeList::QueryInterface(IEnumVARIANT).
On Tue, Jul 5, 2011 at 8:11 PM, Adam Martinson <amartinson(a)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.
On 07/05/2011 11:23 AM, Nikolay Sivov wrote:
On Tue, Jul 5, 2011 at 8:11 PM, Adam Martinson <amartinson(a)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. I like that idea, thanks!
participants (2)
-
Adam Martinson -
Nikolay Sivov