diff --git a/plugins/Cardinal/src/Ildaeil.cpp b/plugins/Cardinal/src/Ildaeil.cpp index 1245ec8..b241339 100644 --- a/plugins/Cardinal/src/Ildaeil.cpp +++ b/plugins/Cardinal/src/Ildaeil.cpp @@ -241,6 +241,7 @@ struct IldaeilModule : Module { mutable NativeTimeInfo fCarlaTimeInfo; void* fUI = nullptr; + Mutex fPluginLoadMutex; float audioDataIn1[BUFFER_SIZE]; float audioDataIn2[BUFFER_SIZE]; @@ -414,6 +415,7 @@ struct IldaeilModule : Module { CarlaEngine* const engine = carla_get_engine_from_handle(fCarlaHostHandle); water::XmlDocument xml(projectState); + const MutexLocker cml(fPluginLoadMutex); engine->loadProjectInternal(xml, true); } @@ -635,10 +637,12 @@ struct IldaeilWidget : ImGuiWidget, IdleCallback, Thread { bool idleCallbackActive = false; IldaeilModule* const module; + Mutex& fPluginLoadMutex; IldaeilWidget(IldaeilModule* const m) : ImGuiWidget(), - module(m) + module(m), + fPluginLoadMutex(m->fPluginLoadMutex) { if (module->fCarlaHostHandle == nullptr) { @@ -828,6 +832,8 @@ struct IldaeilWidget : ImGuiWidget, IdleCallback, Thread { carla_set_engine_option(handle, ENGINE_OPTION_PREFER_PLUGIN_BRIDGES, fPluginWillRunInBridgeMode, nullptr); + const MutexLocker cml(fPluginLoadMutex); + if (carla_add_plugin(handle, BINARY_NATIVE, fPluginType, nullptr, nullptr, label, 0, 0x0, PLUGIN_OPTIONS_NULL)) { @@ -1008,6 +1014,8 @@ struct IldaeilWidget : ImGuiWidget, IdleCallback, Thread { if (path != nullptr) carla_set_engine_option(module->fCarlaHostHandle, ENGINE_OPTION_PLUGIN_PATH, pluginType, path); + const MutexLocker cml(fPluginLoadMutex); + if (const uint count = carla_get_cached_plugin_count(pluginType, path)) { fPluginCount = 0;