Huw Davies (@huw) commented about dlls/winealsa.drv/mmdevdrv.c:
ret->ISimpleAudioVolume_iface.lpVtbl = &SimpleAudioVolume_Vtbl; ret->IChannelAudioVolume_iface.lpVtbl = &ChannelAudioVolume_Vtbl;
- ret->ref = 1;
- ret->ref = !client;
This doesn't look right.
Note that the difference between the pulse and the other drivers is that pulse's `GetService()` calls `AddRef()` in all success cases. I think the other drivers do this in a more logical way - have the session wrapper constructor return an object with `ref` set to one and don't `AddRef()` it in `GetService()`.