v4l2src: fix memory leak in new uri handler code
authorTim-Philipp Müller <tim.muller@collabora.co.uk>
Tue, 5 Jan 2010 09:47:00 +0000 (09:47 +0000)
committerTim-Philipp Müller <tim.muller@collabora.co.uk>
Tue, 5 Jan 2010 09:49:16 +0000 (09:49 +0000)
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

index ed946269141e64ffda006a44c0ae5e17ccad3b77..7dd773716fb25eafc30bbef02886537d065b79e9 100644 (file)
@@ -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://";
 }