On Tue, Jul 5, 2011 at 8:11 PM, Adam Martinson amartinson@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.