Rémi Bernon (@rbernon) commented about dlls/dmband/bandtrack.c:
DMUS_BAND_PARAM *band_param = param;
if (!band_param || !band_param->pBand)
return E_POINTER;
if (!(new_entry = calloc(1, sizeof(*new_entry))))
return E_OUTOFMEMORY;
new_entry->band = band_param->pBand;
new_entry->head.lBandTimeLogical = time;
new_entry->head.lBandTimePhysical = band_param->mtTimePhysical;
IDirectMusicBand_AddRef(new_entry->band);
if (list_empty(&This->bands))
list_add_tail(&This->bands, &new_entry->entry);
else
{
LIST_FOR_EACH_ENTRY_SAFE(entry, next_entry, &This->bands, struct band_entry, entry)
if (entry->entry.next == &This->bands || next_entry->head.lBandTimeLogical > time)
list_add_after(&entry->entry, &new_entry->entry);
I think you'll need to break out of the loop here?