Fix various memory leaks
authorBert Vermeulen <bert@biot.com>
Sun, 5 May 2013 15:20:13 +0000 (17:20 +0200)
committerBert Vermeulen <bert@biot.com>
Sun, 5 May 2013 15:20:13 +0000 (17:20 +0200)
controller.c
decoder.c

index 9b8d35bd389b13c896be8af73cf9a0112b6eded3..2f766651864c2a34f8691797a2beb15b01da0246 100644 (file)
@@ -229,10 +229,10 @@ SRD_PRIV int srd_decoder_searchpath_add(const char *path)
        srd_dbg("Adding '%s' to module path.", path);
 
        new_path = g_string_sized_new(256);
-       g_string_assign(new_path, g_strdup(path));
+       g_string_assign(new_path, path);
        py_cur_path = PySys_GetObject("path");
        for (i = 0; i < PyList_Size(py_cur_path); i++) {
-               g_string_append(new_path, g_strdup(G_SEARCHPATH_SEPARATOR_S));
+               g_string_append(new_path, G_SEARCHPATH_SEPARATOR_S);
                py_item = PyList_GetItem(py_cur_path, i);
                if (!PyUnicode_Check(py_item))
                        /* Shouldn't happen. */
@@ -240,6 +240,7 @@ SRD_PRIV int srd_decoder_searchpath_add(const char *path)
                if (py_str_as_str(py_item, &item) != SRD_OK)
                        continue;
                g_string_append(new_path, item);
+               g_free(item);
        }
 
        /* Convert to wide chars. */
@@ -401,6 +402,7 @@ SRD_API int srd_inst_option_set(struct srd_decoder_inst *di,
                 */
                if (PyDict_SetItemString(py_di_options, key, py_optval) == -1)
                        goto err_out;
+               g_free(key);
        }
 
        ret = SRD_OK;
@@ -816,6 +818,7 @@ SRD_PRIV void srd_inst_free(struct srd_decoder_inst *di)
                g_free(pdo);
        }
        g_slist_free(di->pd_output);
+       g_free(di);
 }
 
 /** @private */
index a7e582278662b91bd34fea37363cb887257f6176..de9b33b36ec293a48b368fbdab2bb249eb51d761 100644 (file)
--- a/decoder.c
+++ b/decoder.c
@@ -217,6 +217,7 @@ static int get_options(struct srd_decoder *d)
                }
                g_variant_ref_sink(o->def);
                d->options = g_slist_append(d->options, o);
+               g_free(key);
        }
        Py_DecRef(py_keys);
        Py_DecRef(py_values);
@@ -493,7 +494,7 @@ SRD_API int srd_decoder_unload(struct srd_decoder *dec)
        /* The module itself. */
        Py_XDECREF(dec->py_mod);
 
-       /* TODO: (g_)free dec itself? */
+       g_free(dec);
 
        return SRD_OK;
 }