prevent multiple concurrent plugin scans.
authorRobin Gareus <robin@gareus.org>
Thu, 16 Jul 2015 17:49:55 +0000 (19:49 +0200)
committerRobin Gareus <robin@gareus.org>
Thu, 16 Jul 2015 17:49:55 +0000 (19:49 +0200)
libs/ardour/ardour/plugin_manager.h
libs/ardour/plugin_manager.cc

index 3a6a210b5f4720e9ff875c32fd00f50234a31571..663bb92324ab7a839248b81a27817ab51e916097 100644 (file)
@@ -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 ();
 };
index 2b84c22fe7396c09a77fa003221d624d3ec33ed4..a9dd9e48b3e60441378621f90f226e654fd3707c 100644 (file)
@@ -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;