avifil32: Use atomic operations to manipulate the refcount.

Signed-off-by: Michael Stefaniuc <mstefani@redhat.de>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
Michael Stefaniuc 2016-07-12 10:06:18 +02:00 committed by Alexandre Julliard
parent 919a338947
commit 72175acdd1
1 changed files with 15 additions and 17 deletions

View File

@ -57,10 +57,8 @@ static const IClassFactoryVtbl iclassfact = {
typedef struct
{
/* IUnknown fields */
IClassFactory IClassFactory_iface;
DWORD dwRef;
LONG ref;
CLSID clsid;
} IClassFactoryImpl;
@ -82,7 +80,7 @@ static HRESULT AVIFILE_CreateClassFactory(const CLSID *pclsid, const IID *riid,
return E_OUTOFMEMORY;
pClassFactory->IClassFactory_iface.lpVtbl = &iclassfact;
pClassFactory->dwRef = 0;
pClassFactory->ref = 0;
pClassFactory->clsid = *pclsid;
hr = IClassFactory_QueryInterface(&pClassFactory->IClassFactory_iface, riid, ppv);
@ -109,26 +107,26 @@ static HRESULT WINAPI IClassFactory_fnQueryInterface(LPCLASSFACTORY iface,
return E_NOINTERFACE;
}
static ULONG WINAPI IClassFactory_fnAddRef(LPCLASSFACTORY iface)
static ULONG WINAPI IClassFactory_fnAddRef(IClassFactory *iface)
{
IClassFactoryImpl *This = impl_from_IClassFactory(iface);
ULONG ref = InterlockedIncrement(&This->ref);
TRACE("(%p)\n", iface);
return ++(This->dwRef);
TRACE("(%p) ref = %u\n", This, ref);
return ref;
}
static ULONG WINAPI IClassFactory_fnRelease(LPCLASSFACTORY iface)
static ULONG WINAPI IClassFactory_fnRelease(IClassFactory *iface)
{
IClassFactoryImpl *This = impl_from_IClassFactory(iface);
ULONG ref = InterlockedDecrement(&This->ref);
TRACE("(%p)\n", iface);
if ((--(This->dwRef)) > 0)
return This->dwRef;
TRACE("(%p) ref = %u\n", This, ref);
if(!ref)
HeapFree(GetProcessHeap(), 0, This);
return 0;
return ref;
}
static HRESULT WINAPI IClassFactory_fnCreateInstance(LPCLASSFACTORY iface,