Fix some more memory leaks
[src/app-framework-binder.git] / src / afb-api-v3.c
index 5134c96..02853b1 100644 (file)
@@ -135,9 +135,9 @@ static struct json_object *describe_verb_v3(const struct afb_verb_v3 *verb)
 
        a = json_object_new_object();
        json_object_object_add(g, "responses", a);
-       f = json_object_new_object();
-       json_object_object_add(a, "200", f);
-       json_object_object_add(f, "description", json_object_new_string(verb->info?:verb->verb));
+       g = json_object_new_object();
+       json_object_object_add(a, "200", g);
+       json_object_object_add(g, "description", json_object_new_string(verb->info?:verb->verb));
 
        return f;
 }
@@ -194,8 +194,10 @@ struct afb_api_v3 *afb_api_v3_create(
 
        /* allocates the description */
        api = calloc(1, sizeof *api + (copy_info && info ? 1 + strlen(info) : 0));
-       if (!api)
+       if (!api) {
+               ERROR("out of memory");
                goto oom;
+       }
        api->refcount = 1;
        if (!info)
                api->info = &nulchar;
@@ -223,7 +225,6 @@ oom3:
 oom2:
        free(api);
 oom:
-       ERROR("out of memory");
        return NULL;
 }
 
@@ -238,6 +239,9 @@ void afb_api_v3_unref(struct afb_api_v3 *api)
 {
        if (api && !__atomic_sub_fetch(&api->refcount, 1, __ATOMIC_RELAXED)) {
                afb_export_destroy(api->export);
+               while (api->count)
+                       free(api->verbs[--api->count]);
+               free(api->verbs);
                free(api);
        }
 }