On 5/5/20 3:36 PM, Alistair Leslie-Hughes wrote:
@@ -81,6 +90,19 @@ static ULONG WINAPI wave_track_Release(IDirectMusicTrack8 *iface) TRACE("(%p) ref=%d\n", This, ref);
if (!ref) {
struct list *cursor, *cursor2;
struct DMUS_PRIVATE_WAVE_ITEM *item;
LIST_FOR_EACH_SAFE(cursor, cursor2, &This->items) {
item = LIST_ENTRY(cursor, struct DMUS_PRIVATE_WAVE_ITEM, entry);
list_remove(cursor);
if (item->object)
IDirectMusicObject_Release(item->object);
heap_free(item);
}
HeapFree(GetProcessHeap(), 0, This); DMIME_UnlockModule(); }
LIST_FOR_EACH_ENTRY_SAFE() will make this shorter.
- hr = IStream_QueryInterface (stream, &IID_IDirectMusicGetLoader, (void**)&getloader);
- if (FAILED(hr))
return hr;
- hr = IDirectMusicGetLoader_GetLoader (getloader, &loader);
- if (FAILED(hr))
return hr;
- IDirectMusicGetLoader_Release (getloader);
- hr = IDirectMusicLoader_GetObject (loader, &description, &IID_IDirectMusicObject, (void**)&object);
- IDirectMusicLoader_Release (loader);
- return SUCCEEDED(hr) ? S_OK : hr;
This leaks 'getloader' on failure. Does this really work though? I should probably be GetObject((void**)object)?