debug/fix LV2 state loading on OSX 10.5/PPC
authorRobin Gareus <robin@gareus.org>
Mon, 27 Jul 2015 15:11:35 +0000 (17:11 +0200)
committerRobin Gareus <robin@gareus.org>
Mon, 27 Jul 2015 15:11:52 +0000 (17:11 +0200)
libs/ardour/lv2_plugin.cc

index 243312f95b84375e6d70c640b7ba573bf3abbe98..c12e4930d5c5f00df4c35f65b2693a3d1f0cfc08 100644 (file)
@@ -1624,10 +1624,24 @@ LV2Plugin::set_state(const XMLNode& node, int version)
                        plugin_dir(),
                        Glib::build_filename(prop->value(), "state.ttl"));
 
-               LilvState* state = lilv_state_new_from_file(
-                       _world.world, _uri_map.urid_map(), NULL, state_file.c_str());
+               if (!Glib::file_test (state_file, Glib::FileTest (Glib::FILE_TEST_EXISTS | Glib::FILE_TEST_IS_REGULAR))) {
+                       /* this should be done in lilv_state_new_from_file()
+                        * some systems don't like realpath() calls with an non-existent file.
+                        * (hopefully this fixes crashes on OSX 10.5/PPC, see #6456,
+                        * segfault in __asm realpath$DARWIN_EXTSN
+                        * if so, backport upstream to liblilv)
+                        */
+                       error << string_compose(
+                               "LV2: expected state file \"%1\" does not exist.",
+                               state_file) << endmsg;
+               } else {
 
-               lilv_state_restore(state, _impl->instance, NULL, NULL, 0, NULL);
+                       LilvState* state = lilv_state_new_from_file(
+                                       _world.world, _uri_map.urid_map(), NULL, state_file.c_str());
+
+                       // lilv_state_restore allows/ignores possible NULL state
+                       lilv_state_restore(state, _impl->instance, NULL, NULL, 0, NULL);
+               }
        }
 
        latency_compute_run();