Michael Stefaniuc (@mstefani) commented about dlls/dmime/segmentstate.c:
{ MUSIC_TIME end_time = This->start_time + This->played;
if (This->repeats)
{
if (FAILED(hr = IDirectMusicSegment_GetLoopPoints(This->segment,
&This->played, &This->end_point)))
{
ERR("Failed to get segment loop points, hr %#lx\n", hr);
return hr;
}
This->start_time += This->end_point - This->start_point;
This->repeats--;
if (next_time - This->start_time > 0 && This->end_point - This->start_point > 0) goto play_more;
Not a fan of goto for flow control outside of error handling.\ Here a do while loop should work too.