summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/music/fluidsynth.cpp13
1 files changed, 10 insertions, 3 deletions
diff --git a/src/music/fluidsynth.cpp b/src/music/fluidsynth.cpp
index 000432e1d..b5cbf46aa 100644
--- a/src/music/fluidsynth.cpp
+++ b/src/music/fluidsynth.cpp
@@ -163,14 +163,21 @@ void MusicDriver_FluidSynth::PlaySong(const MusicSongInfo &song)
void MusicDriver_FluidSynth::StopSong()
{
- std::lock_guard<std::mutex> lock{ _midi.synth_mutex };
+ {
+ std::lock_guard<std::mutex> lock{ _midi.synth_mutex };
+
+ if (!_midi.player) return;
- if (!_midi.player) return;
+ fluid_player_stop(_midi.player);
+ }
- fluid_player_stop(_midi.player);
+ /* The join must be run without lock as the Music rendering needs to be
+ * running so FluidSynth's internals can actually stop the playing. */
if (fluid_player_join(_midi.player) != FLUID_OK) {
DEBUG(driver, 0, "Could not join player");
}
+
+ std::lock_guard<std::mutex> lock{ _midi.synth_mutex };
delete_fluid_player(_midi.player);
fluid_synth_system_reset(_midi.synth);
fluid_synth_all_sounds_off(_midi.synth, -1);