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.