summaryrefslogtreecommitdiff
path: root/libs/ardour
diff options
context:
space:
mode:
authorRobin Gareus <robin@gareus.org>2015-07-16 19:49:55 +0200
committerRobin Gareus <robin@gareus.org>2015-07-16 19:49:55 +0200
commit700c7b225f992dbfe31e714b321d4a8ffb482bcd (patch)
tree27c5a3a4bcc2f4c970cccfa076cd09e178929498 /libs/ardour
parent87b89a605f0c4e5fcabf9061d1a13c9caa65a824 (diff)
prevent multiple concurrent plugin scans.
Diffstat (limited to 'libs/ardour')
-rw-r--r--libs/ardour/ardour/plugin_manager.h2
-rw-r--r--libs/ardour/plugin_manager.cc6
2 files changed, 8 insertions, 0 deletions
diff --git a/libs/ardour/ardour/plugin_manager.h b/libs/ardour/ardour/plugin_manager.h
index 3a6a210b5f..663bb92324 100644
--- a/libs/ardour/ardour/plugin_manager.h
+++ b/libs/ardour/ardour/plugin_manager.h
@@ -144,6 +144,8 @@ class LIBARDOUR_API PluginManager : public boost::noncopyable {
std::string get_ladspa_category (uint32_t id);
std::vector<uint32_t> ladspa_plugin_whitelist;
+ Glib::Threads::Mutex _lock;
+
static PluginManager* _instance; // singleton
PluginManager ();
};
diff --git a/libs/ardour/plugin_manager.cc b/libs/ardour/plugin_manager.cc
index 2b84c22fe7..a9dd9e48b3 100644
--- a/libs/ardour/plugin_manager.cc
+++ b/libs/ardour/plugin_manager.cc
@@ -225,6 +225,12 @@ PluginManager::~PluginManager()
void
PluginManager::refresh (bool cache_only)
{
+ Glib::Threads::Mutex::Lock lm (_lock, Glib::Threads::TRY_LOCK);
+
+ if (!lm.locked()) {
+ return;
+ }
+
DEBUG_TRACE (DEBUG::PluginManager, "PluginManager::refresh\n");
_cancel_scan = false;