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. -- https://gitlab.winehq.org/wine/wine/-/merge_requests/4358#note_51973