static ULONG WINAPI IDirect3DStateBlock8Impl_Release(IDirect3DStateBlock8 *iface) { IDirect3DStateBlock8Impl *This = (IDirect3DStateBlock8Impl *)iface; ULONG ref = InterlockedDecrement(&This->ref); TRACE("(%p) : ReleaseRef to %ld\n", This, ref); if (ref == 0) { IWineD3DStateBlock_Release(This->wineD3DStateBlock); HeapFree(GetProcessHeap(), 0, This); } return ref; }
static ULONG WINAPI IDirect3DStateBlock9Impl_Release(LPDIRECT3DSTATEBLOCK9 iface) { IDirect3DStateBlock9Impl *This = (IDirect3DStateBlock9Impl *)iface; ULONG ref = InterlockedDecrement(&This->ref); TRACE("(%p) : ReleaseRef to %d\n", This, ref); if (ref == 0) { EnterCriticalSection(&d3d9_cs); IWineD3DStateBlock_Release(This->wineD3DStateBlock); LeaveCriticalSection(&d3d9_cs); IUnknown_Release(This->parentDevice); HeapFree(GetProcessHeap(), 0, This); } return ref; }
static ULONG WINAPI IDirect3DStateBlock9Impl_Release(LPDIRECT3DSTATEBLOCK9 iface) { IDirect3DStateBlock9Impl *This = (IDirect3DStateBlock9Impl *)iface; ULONG ref = InterlockedDecrement(&This->ref); TRACE("%p decreasing refcount to %u.\n", iface, ref); if (ref == 0) { wined3d_mutex_lock(); IWineD3DStateBlock_Release(This->wineD3DStateBlock); wined3d_mutex_unlock(); IDirect3DDevice9Ex_Release(This->parentDevice); HeapFree(GetProcessHeap(), 0, This); } return ref; }