From 69692696ec2ce2dbec76736022838fa944fbf843 Mon Sep 17 00:00:00 2001 From: "alexey.lysiuk" Date: Wed, 19 May 2021 09:12:59 +0300 Subject: [PATCH] - load FluidSynth dynamic library once https://forum.zdoom.org/viewtopic.php?t=70710 --- .../music_fluidsynth_mididevice.cpp | 46 ++++++++----------- 1 file changed, 18 insertions(+), 28 deletions(-) diff --git a/source/mididevices/music_fluidsynth_mididevice.cpp b/source/mididevices/music_fluidsynth_mididevice.cpp index 2d21ab6..0f6483a 100644 --- a/source/mididevices/music_fluidsynth_mididevice.cpp +++ b/source/mididevices/music_fluidsynth_mididevice.cpp @@ -116,7 +116,6 @@ protected: static TReqProc fluid_synth_sysex; bool LoadFluidSynth(const char *fluid_lib); - void UnloadFluidSynth(); #endif }; @@ -251,9 +250,6 @@ FluidSynthMIDIDevice::~FluidSynthMIDIDevice() { delete_fluid_settings(FluidSettings); } -#ifdef DYN_FLUIDSYNTH - UnloadFluidSynth(); -#endif } //========================================================================== @@ -536,35 +532,29 @@ DYN_FLUID_SYM(fluid_synth_sysex); bool FluidSynthMIDIDevice::LoadFluidSynth(const char *fluid_lib) { - if (fluid_lib && strlen(fluid_lib) > 0) + static bool is_loaded = false; + static bool is_checked = false; + + if (!is_checked) { - if(!FluidSynthModule.Load({fluid_lib})) + if (fluid_lib && strlen(fluid_lib) > 0) { - const char* libname = fluid_lib; - ZMusic_Printf(ZMUSIC_MSG_ERROR, "Could not load %s\n", libname); + is_loaded = FluidSynthModule.Load({ fluid_lib }); + if (!is_loaded) + ZMusic_Printf(ZMUSIC_MSG_ERROR, "Could not load %s\n", fluid_lib); } - else - return true; + + if (!is_loaded) + { + is_loaded = FluidSynthModule.Load({ FLUIDSYNTHLIB1, FLUIDSYNTHLIB2 }); + if (!is_loaded) + ZMusic_Printf(ZMUSIC_MSG_ERROR, "Could not load " FLUIDSYNTHLIB1 " or " FLUIDSYNTHLIB2 "\n"); + } + + is_checked = true; } - if(!FluidSynthModule.Load({FLUIDSYNTHLIB1, FLUIDSYNTHLIB2})) - { - ZMusic_Printf(ZMUSIC_MSG_ERROR, "Could not load " FLUIDSYNTHLIB1 " or " FLUIDSYNTHLIB2 "\n"); - return false; - } - - return true; -} - -//========================================================================== -// -// FluidSynthMIDIDevice :: UnloadFluidSynth -// -//========================================================================== - -void FluidSynthMIDIDevice::UnloadFluidSynth() -{ - FluidSynthModule.Unload(); + return is_loaded; } #endif