From d68689255df0de08a9ff6fe7366c3d1aeed1380e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tim-Philipp=20M=C3=BCller?= Date: Tue, 5 Jan 2010 09:47:00 +0000 Subject: [PATCH] v4l2src: fix memory leak in new uri handler code Don't leak a string everytime get_uri() is called and a device has been set. There's a limited number of devices, so just intern the string instead of doing more elaborate housekeeping and storing it in the instance struct or so. --- sys/v4l2/gstv4l2src.c | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/sys/v4l2/gstv4l2src.c b/sys/v4l2/gstv4l2src.c index ed94626914..7dd773716f 100644 --- a/sys/v4l2/gstv4l2src.c +++ b/sys/v4l2/gstv4l2src.c @@ -982,8 +982,16 @@ gst_v4l2src_uri_get_uri (GstURIHandler * handler) { GstV4l2Src *v4l2src = GST_V4L2SRC (handler); - if (v4l2src->v4l2object->videodev) - return g_strdup_printf ("v4l2://%s", v4l2src->v4l2object->videodev); + if (v4l2src->v4l2object->videodev != NULL) { + gchar uri[256]; + + /* need to return a const string, but also don't want to leak the generated + * string, so just intern it - there's a limited number of video devices + * after all */ + g_snprintf (uri, sizeof (uri), "v4l2://%s", v4l2src->v4l2object->videodev); + return g_intern_string (uri); + } + return "v4l2://"; }