aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDavid Robillard <d@drobilla.net>2018-09-29 11:43:25 +0200
committerDavid Robillard <d@drobilla.net>2018-11-10 11:45:15 +0100
commit67440e0cd7f68adc38c02a5ceaf54a180c74fa15 (patch)
tree9364941274e7189ac34c12a5a9997a98cd0e6806
parent29c7dd820c05ef334c7a2baa15d5b89502ea0444 (diff)
downloadjalv-67440e0cd7f68adc38c02a5ceaf54a180c74fa15.tar.gz
jalv-67440e0cd7f68adc38c02a5ceaf54a180c74fa15.tar.bz2
jalv-67440e0cd7f68adc38c02a5ceaf54a180c74fa15.zip
Clean up properly after failing to open
-rw-r--r--src/jalv.c17
-rw-r--r--src/symap.c4
2 files changed, 17 insertions, 4 deletions
diff --git a/src/jalv.c b/src/jalv.c
index ff20432..14a0988 100644
--- a/src/jalv.c
+++ b/src/jalv.c
@@ -760,6 +760,7 @@ jalv_open(Jalv* const jalv, int argc, char** argv)
#endif
if (jalv_init(&argc, &argv, &jalv->opts)) {
+ jalv_close(jalv);
return -1;
}
@@ -916,6 +917,7 @@ jalv_open(Jalv* const jalv, int argc, char** argv)
}
if (!state) {
fprintf(stderr, "Failed to load state from %s\n", jalv->opts.load);
+ jalv_close(jalv);
return -2;
}
plugin_uri = lilv_node_duplicate(lilv_state_get_plugin_uri(state));
@@ -925,6 +927,7 @@ jalv_open(Jalv* const jalv, int argc, char** argv)
if (!plugin_uri) {
fprintf(stderr, "Missing plugin URI, try lv2ls to list plugins\n");
+ jalv_close(jalv);
return -3;
}
@@ -934,7 +937,7 @@ jalv_open(Jalv* const jalv, int argc, char** argv)
lilv_node_free(plugin_uri);
if (!jalv->plugin) {
fprintf(stderr, "Failed to find plugin\n");
- lilv_world_free(world);
+ jalv_close(jalv);
return -4;
}
@@ -948,7 +951,7 @@ jalv_open(Jalv* const jalv, int argc, char** argv)
lilv_node_free(preset);
if (!state) {
fprintf(stderr, "Failed to find preset <%s>\n", jalv->opts.preset);
- lilv_world_free(world);
+ jalv_close(jalv);
return -5;
}
}
@@ -1016,6 +1019,7 @@ jalv_open(Jalv* const jalv, int argc, char** argv)
if (!(jalv->backend = jalv_backend_init(jalv))) {
fprintf(stderr, "Failed to connect to audio system\n");
+ jalv_close(jalv);
return -7;
}
@@ -1077,6 +1081,7 @@ jalv_open(Jalv* const jalv, int argc, char** argv)
jalv->plugin, jalv->sample_rate, features);
if (!jalv->instance) {
fprintf(stderr, "Failed to instantiate plugin.\n");
+ jalv_close(jalv);
return -8;
}
@@ -1179,8 +1184,12 @@ jalv_close(Jalv* const jalv)
#ifdef HAVE_SUIL
suil_host_free(jalv->ui_host);
#endif
- sratom_free(jalv->sratom);
- sratom_free(jalv->ui_sratom);
+ if (jalv->sratom) {
+ sratom_free(jalv->sratom);
+ }
+ if (jalv->ui_sratom) {
+ sratom_free(jalv->ui_sratom);
+ }
lilv_uis_free(jalv->uis);
lilv_world_free(jalv->world);
diff --git a/src/symap.c b/src/symap.c
index 40c8980..0b567e8 100644
--- a/src/symap.c
+++ b/src/symap.c
@@ -68,6 +68,10 @@ symap_new(void)
void
symap_free(Symap* map)
{
+ if (!map) {
+ return;
+ }
+
for (uint32_t i = 0; i < map->size; ++i) {
free(map->symbols[i]);
}