static ULONG WINAPI PrimaryBufferImpl_Release(LPDIRECTSOUNDBUFFER iface) { IDirectSoundBufferImpl *This = impl_from_IDirectSoundBuffer(iface); DWORD ref = InterlockedDecrement(&(This->ref)); TRACE("(%p) ref was %d\n", This, ref + 1); if (!ref && !InterlockedDecrement(&This->numIfaces)) primarybuffer_destroy(This); return ref; }
static ULONG WINAPI IDirectSound3DListenerImpl_Release(LPDIRECTSOUND3DLISTENER iface) { IDirectSound3DListenerImpl *This = (IDirectSound3DListenerImpl *)iface; ULONG ref = InterlockedDecrement(&(This->ref)); TRACE("(%p) ref was %d\n", This, ref + 1); if (!ref) { This->device->listener = 0; if (!InterlockedDecrement(&This->device->primary->numIfaces)) primarybuffer_destroy(This->device->primary); HeapFree(GetProcessHeap(), 0, This); TRACE("(%p) released\n", This); } return ref; }