invalidate AU cache on re-scan
authorRobin Gareus <robin@gareus.org>
Fri, 22 Apr 2016 19:10:04 +0000 (21:10 +0200)
committerRobin Gareus <robin@gareus.org>
Fri, 22 Apr 2016 19:10:39 +0000 (21:10 +0200)
libs/ardour/ardour/audio_unit.h
libs/ardour/audio_unit.cc
libs/ardour/plugin_manager.cc

index 9eb7901af37dbb9452191c0d28e20ad0e64e472e..448584251c31f010efa9a69b8cbcd64eab918829 100644 (file)
@@ -258,6 +258,7 @@ class LIBARDOUR_API AUPluginInfo : public PluginInfo {
 
        bool reconfigurable_io() const { return true; }
 
+       static void clear_cache ();
        static PluginInfoList* discover (bool scan_only);
        static bool au_get_crashlog (std::string &msg);
        static std::string stringify_descriptor (const CAComponentDescription&);
index 1862844cd90a89b1c78f2a2869b19534853975e0..e28d89205395d6c1c2b75d7636cf5155fa4b172c 100644 (file)
@@ -2698,6 +2698,8 @@ AUPluginInfo::discover (bool scan_only)
 
        if (!Glib::file_test (au_cache_path(), Glib::FILE_TEST_EXISTS)) {
                ARDOUR::BootMessage (_("Discovering AudioUnit plugins (could take some time ...)"));
+               // flush RAM cache -- after clear_cache()
+               cached_info.clear();
        }
        // create crash log file
        au_start_crashlog ();
@@ -3072,6 +3074,17 @@ AUPluginInfo::cached_io_configuration (const std::string& unique_id,
        return 0;
 }
 
+void
+AUPluginInfo::clear_cache ()
+{
+       const string& fn = au_cache_path();
+       if (Glib::file_test (fn, Glib::FILE_TEST_EXISTS)) {
+               ::g_unlink(fn.c_str());
+       }
+       // keep cached_info in RAM until restart or re-scan
+       cached_info.clear();
+}
+
 void
 AUPluginInfo::add_cached_info (const std::string& id, AUPluginCachedInfo& cinfo)
 {
index 5f8ad720c4c643ab86355533fdff4a6f32635f30..d868b1d00aede6eb4c0007530e54b38fd6f1ca62 100644 (file)
@@ -437,11 +437,7 @@ void
 PluginManager::clear_au_cache ()
 {
 #ifdef AUDIOUNIT_SUPPORT
-       // AUPluginInfo::au_cache_path ()
-       string fn = Glib::build_filename (ARDOUR::user_cache_directory(), "au_cache");
-       if (Glib::file_test (fn, Glib::FILE_TEST_EXISTS)) {
-               ::g_unlink(fn.c_str());
-       }
+       AUPluginInfo::clear_cache ();
 #endif
 }