From 75b33a6cab1bcd2e0205e305c81a081c46f1b64e Mon Sep 17 00:00:00 2001 From: Rene Stadler Date: Fri, 22 Sep 2006 13:21:59 +0000 Subject: [PATCH] gst/gstlibs.override: Fixes for GstController creation memleak fixes. Original commit message from CVS: Patch by: Rene Stadler * gst/gstlibs.override: Fixes for GstController creation memleak fixes. --- ChangeLog | 7 +++++++ common | 2 +- gst/gstlibs.override | 29 ++++++++++++++++++++++++++--- 3 files changed, 34 insertions(+), 4 deletions(-) diff --git a/ChangeLog b/ChangeLog index 0f24580..356d863 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,10 @@ +2006-09-22 Edward Hervey + + Patch by: Rene Stadler + * gst/gstlibs.override: + Fixes for GstController creation + memleak fixes. + 2006-09-12 Edward Hervey * gst/extend/Makefile.am: diff --git a/common b/common index d287125..a8c15b7 160000 --- a/common +++ b/common @@ -1 +1 @@ -Subproject commit d287125f93da692bc25d53b0b7b0e2f90424a212 +Subproject commit a8c15b7a2c75fc2bd83850cb17cb05a1ee84ecaf diff --git a/gst/gstlibs.override b/gst/gstlibs.override index c3efcb4..4280e13 100644 --- a/gst/gstlibs.override +++ b/gst/gstlibs.override @@ -95,6 +95,7 @@ override gst_controller_new_list args static int _wrap_gst_controller_new_list(PyGObject *self, PyObject *args) { + PyObject *target_pyobj; PyGObject *target; gint len; GList *list = NULL; @@ -103,7 +104,18 @@ _wrap_gst_controller_new_list(PyGObject *self, PyObject *args) PyErr_SetString(PyExc_TypeError, "Controller requires at least a target object"); return -1; } - target = (PyGObject *) PyTuple_GetItem(args, 0); + + target_pyobj = PyTuple_GetItem(args, 0); + if (!PyObject_TypeCheck(target_pyobj, &PyGObject_Type)) { + PyErr_Format(PyExc_TypeError, + "argument 1 must be %s, not %s", + PyGObject_Type.tp_name, + target_pyobj == Py_None ? "None" : target_pyobj->ob_type->tp_name); + return -1; + } + + target = (PyGObject *) target_pyobj; + if (len > 1) while (len-- > 1) { PyObject *temp; @@ -111,11 +123,16 @@ _wrap_gst_controller_new_list(PyGObject *self, PyObject *args) temp = PyTuple_GetItem(args, len); str = PyString_AsString(temp); + if (str == NULL) { + g_list_free (list); + return -1; + } GST_INFO("prepending %s [%d]", str, len); - list = g_list_prepend(list, PyString_AsString(temp)); + list = g_list_prepend(list, str); } self->obj = (GObject *) gst_controller_new_list(target->obj, list); + g_list_free (list); if (!self->obj) { PyErr_SetString(PyExc_RuntimeError, "could not create GstController object"); @@ -147,11 +164,16 @@ _wrap_gst_controller_remove_properties (PyGObject *self, PyObject *args) temp = PyTuple_GetItem(args, len); str = PyString_AsString(temp); + if (str == NULL) { + g_list_free (list); + return NULL; + } GST_INFO("prepending %s [%d]", str, len); - list = g_list_prepend(list, PyString_AsString(temp)); + list = g_list_prepend(list, str); } res = gst_controller_remove_properties_list(controller, list); + g_list_free (list); if (res) pret = Py_True; @@ -213,6 +235,7 @@ _wrap_gst_controller_set_from_list (PyGObject *self, PyObject *args) } res = gst_controller_set_from_list(controller, pname, list); + g_slist_free (list); if (res) pret = Py_True; -- 2.7.4