From 22bc62ed4360aaea29c131cc7dead87fa25ef228 Mon Sep 17 00:00:00 2001 From: Robin Gareus Date: Mon, 27 Jul 2015 17:11:35 +0200 Subject: debug/fix LV2 state loading on OSX 10.5/PPC --- libs/ardour/lv2_plugin.cc | 20 +++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) diff --git a/libs/ardour/lv2_plugin.cc b/libs/ardour/lv2_plugin.cc index 243312f95b..c12e4930d5 100644 --- a/libs/ardour/lv2_plugin.cc +++ b/libs/ardour/lv2_plugin.cc @@ -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(); -- cgit v1.2.3