gstreamer: base: Fix memory leaks when context parse fails.

When g_option_context_parse fails, context and error variables are not getting free'd
which results in memory leaks. Free'ing the same.

And replacing g_error_free with g_clear_error, which checks if the error being passed
is not NULL and sets the variable to NULL on free'ing.

https://bugzilla.gnome.org/show_bug.cgi?id=753852
This commit is contained in:
Vineeth TM 2015-08-20 15:59:15 +09:00 committed by Sebastian Dröge
parent 0c0f803488
commit 8e5f7f27f5
10 changed files with 33 additions and 15 deletions

View file

@ -415,6 +415,7 @@ parse_license_rdf (const gchar * fn, const gchar * rdf)
if (!g_markup_parse_context_parse (ctx, rdf, -1, &err)) { if (!g_markup_parse_context_parse (ctx, rdf, -1, &err)) {
g_error ("Error parsing file %s: %s\n", fn, err->message); g_error ("Error parsing file %s: %s\n", fn, err->message);
g_clear_error (&err);
} }
licenses = g_list_append (licenses, license); licenses = g_list_append (licenses, license);
@ -433,6 +434,7 @@ read_licenses (const gchar * licenses_dir)
if (dir == NULL) if (dir == NULL)
g_error ("Failed to g_dir_open('%s'): %s", licenses_dir, err->message); g_error ("Failed to g_dir_open('%s'): %s", licenses_dir, err->message);
g_clear_error (&err);
while ((name = g_dir_read_name (dir))) { while ((name = g_dir_read_name (dir))) {
gchar *fn, *rdf; gchar *fn, *rdf;
@ -443,7 +445,7 @@ read_licenses (const gchar * licenses_dir)
g_free (rdf); g_free (rdf);
} else { } else {
g_printerr ("Could not read file '%s': %s\n", fn, err->message); g_printerr ("Could not read file '%s': %s\n", fn, err->message);
g_error_free (err); g_clear_error (&err);
err = NULL; err = NULL;
} }
g_free (fn); g_free (fn);
@ -722,6 +724,8 @@ main (int argc, char **argv)
g_option_context_add_main_entries (ctx, options, NULL); g_option_context_add_main_entries (ctx, options, NULL);
if (!g_option_context_parse (ctx, &argc, &argv, &err)) { if (!g_option_context_parse (ctx, &argc, &argv, &err)) {
g_printerr ("Error initializing: %s\n", err->message); g_printerr ("Error initializing: %s\n", err->message);
g_option_context_free (ctx);
g_clear_error (&err);
exit (1); exit (1);
} }
g_option_context_free (ctx); g_option_context_free (ctx);

View file

@ -399,6 +399,8 @@ main (int argc, char **argv)
if (!g_option_context_parse (ctx, &argc, &argv, &err)) { if (!g_option_context_parse (ctx, &argc, &argv, &err)) {
g_print ("Error initializing: %s\n", err->message); g_print ("Error initializing: %s\n", err->message);
g_option_context_free (ctx);
g_clear_error (&err);
exit (1); exit (1);
} }

View file

@ -1466,6 +1466,7 @@ shot_cb (GtkButton * button, PlaybackApp * app)
/* save the pixbuf */ /* save the pixbuf */
gdk_pixbuf_save (pixbuf, "snapshot.png", "png", &error, NULL); gdk_pixbuf_save (pixbuf, "snapshot.png", "png", &error, NULL);
gst_buffer_unmap (buffer, &map); gst_buffer_unmap (buffer, &map);
g_clear_error (&error);
done: done:
gst_sample_unref (sample); gst_sample_unref (sample);
@ -3414,6 +3415,8 @@ main (int argc, char **argv)
if (!g_option_context_parse (ctx, &argc, &argv, &err)) { if (!g_option_context_parse (ctx, &argc, &argv, &err)) {
g_print ("Error initializing: %s\n", err->message); g_print ("Error initializing: %s\n", err->message);
g_option_context_free (ctx);
g_clear_error (&err);
exit (1); exit (1);
} }
g_option_context_free (ctx); g_option_context_free (ctx);

View file

@ -961,9 +961,8 @@ static GstElement *
make_parselaunch_pipeline (const gchar * description) make_parselaunch_pipeline (const gchar * description)
{ {
GstElement *pipeline; GstElement *pipeline;
GError *error = NULL;
pipeline = gst_parse_launch (description, &error); pipeline = gst_parse_launch (description, NULL);
seekable_elements = g_list_prepend (seekable_elements, pipeline); seekable_elements = g_list_prepend (seekable_elements, pipeline);
@ -2057,9 +2056,7 @@ shot_cb (GtkButton * button, gpointer data)
/* save the pixbuf */ /* save the pixbuf */
gdk_pixbuf_save (pixbuf, "snapshot.png", "png", &error, NULL); gdk_pixbuf_save (pixbuf, "snapshot.png", "png", &error, NULL);
gst_buffer_unmap (buffer, &map); gst_buffer_unmap (buffer, &map);
g_clear_error (&error);
/* save the pixbuf */
gdk_pixbuf_save (pixbuf, "snapshot.png", "png", &error, NULL);
done: done:
gst_buffer_unref (buffer); gst_buffer_unref (buffer);
@ -2624,7 +2621,7 @@ read_joystick (GIOChannel * source, GIOCondition condition, gpointer user_data)
&bytes_read, &err); &bytes_read, &err);
if (err) { if (err) {
g_print ("error reading from joystick: %s", err->message); g_print ("error reading from joystick: %s", err->message);
g_error_free (err); g_clear_error (&err);
return FALSE; return FALSE;
} else if (bytes_read != sizeof (struct js_event)) { } else if (bytes_read != sizeof (struct js_event)) {
g_print ("error reading joystick, read %u bytes of %u\n", g_print ("error reading joystick, read %u bytes of %u\n",
@ -2678,6 +2675,8 @@ main (int argc, char **argv)
if (!g_option_context_parse (ctx, &argc, &argv, &err)) { if (!g_option_context_parse (ctx, &argc, &argv, &err)) {
g_print ("Error initializing: %s\n", err->message); g_print ("Error initializing: %s\n", err->message);
g_option_context_free (ctx);
g_clear_error (&err);
exit (1); exit (1);
} }
g_option_context_free (ctx); g_option_context_free (ctx);

View file

@ -456,6 +456,8 @@ main (int argc, char **argv)
if (!g_option_context_parse (ctx, &argc, &argv, &err)) { if (!g_option_context_parse (ctx, &argc, &argv, &err)) {
g_print ("Error initializing: %s\n", err->message); g_print ("Error initializing: %s\n", err->message);
g_option_context_free (ctx);
g_clear_error (&err);
exit (1); exit (1);
} }

View file

@ -34,7 +34,7 @@ play_file (const gint delay, const gchar * uri)
gst_message_parse_error (msg, &gerror, &debug); gst_message_parse_error (msg, &gerror, &debug);
gst_object_default_error (GST_MESSAGE_SRC (msg), gerror, debug); gst_object_default_error (GST_MESSAGE_SRC (msg), gerror, debug);
g_error_free (gerror); g_clear_error (&gerror);
g_free (debug); g_free (debug);
break; break;
} }
@ -103,6 +103,8 @@ main (int argc, char **argv)
g_option_context_add_group (ctx, gst_init_get_option_group ()); g_option_context_add_group (ctx, gst_init_get_option_group ());
if (!g_option_context_parse (ctx, &argc, &argv, &err)) { if (!g_option_context_parse (ctx, &argc, &argv, &err)) {
g_print ("Error initializing: %s\n", GST_STR_NULL (err->message)); g_print ("Error initializing: %s\n", GST_STR_NULL (err->message));
g_option_context_free (ctx);
g_clear_error (&err);
exit (1); exit (1);
} }
g_option_context_free (ctx); g_option_context_free (ctx);

View file

@ -128,7 +128,7 @@ bus_cb (GstBus * bus, GstMessage * msg, gpointer user_data)
gst_message_parse_error (msg, &err, &dbg); gst_message_parse_error (msg, &err, &dbg);
gst_object_default_error (msg->src, err, dbg); gst_object_default_error (msg->src, err, dbg);
g_error_free (err); g_clear_error (&err);
g_free (dbg); g_free (dbg);
g_main_loop_quit (loop); g_main_loop_quit (loop);
break; break;
@ -158,6 +158,8 @@ main (int argc, char **argv)
g_option_context_add_group (ctx, gst_init_get_option_group ()); g_option_context_add_group (ctx, gst_init_get_option_group ());
if (!g_option_context_parse (ctx, &argc, &argv, &err)) { if (!g_option_context_parse (ctx, &argc, &argv, &err)) {
g_print ("Error initializing: %s\n", err->message); g_print ("Error initializing: %s\n", err->message);
g_option_context_free (ctx);
g_clear_error (&err);
return 1; return 1;
} }
g_option_context_free (ctx); g_option_context_free (ctx);

View file

@ -166,6 +166,8 @@ main (int argc, char **argv)
g_option_context_add_group (ctx, gst_init_get_option_group ()); g_option_context_add_group (ctx, gst_init_get_option_group ());
if (!g_option_context_parse (ctx, &argc, &argv, &err)) { if (!g_option_context_parse (ctx, &argc, &argv, &err)) {
g_print ("Error initializing: %s\n", GST_STR_NULL (err->message)); g_print ("Error initializing: %s\n", GST_STR_NULL (err->message));
g_option_context_free (ctx);
g_clear_error (&err);
return 1; return 1;
} }
g_option_context_free (ctx); g_option_context_free (ctx);

View file

@ -487,7 +487,7 @@ process_file (GstDiscoverer * dc, const gchar * filename)
if (err) { if (err) {
g_warning ("Couldn't convert filename to URI: %s\n", err->message); g_warning ("Couldn't convert filename to URI: %s\n", err->message);
g_error_free (err); g_clear_error (&err);
return; return;
} }
} else { } else {
@ -498,8 +498,8 @@ process_file (GstDiscoverer * dc, const gchar * filename)
g_print ("Analyzing %s\n", uri); g_print ("Analyzing %s\n", uri);
info = gst_discoverer_discover_uri (dc, uri, &err); info = gst_discoverer_discover_uri (dc, uri, &err);
print_info (info, err); print_info (info, err);
if (err) g_clear_error (&err);
g_error_free (err); if (info)
gst_discoverer_info_unref (info); gst_discoverer_info_unref (info);
} else { } else {
gst_discoverer_discover_uri_async (dc, uri); gst_discoverer_discover_uri_async (dc, uri);

View file

@ -352,7 +352,7 @@ play_bus_msg (GstBus * bus, GstMessage * msg, gpointer user_data)
g_printerr ("WARNING %s\n", err->message); g_printerr ("WARNING %s\n", err->message);
if (dbg != NULL) if (dbg != NULL)
g_printerr ("WARNING debug information: %s\n", dbg); g_printerr ("WARNING debug information: %s\n", dbg);
g_error_free (err); g_clear_error (&err);
g_free (dbg); g_free (dbg);
break; break;
} }
@ -368,7 +368,7 @@ play_bus_msg (GstBus * bus, GstMessage * msg, gpointer user_data)
g_printerr ("ERROR %s for %s\n", err->message, play->uris[play->cur_idx]); g_printerr ("ERROR %s for %s\n", err->message, play->uris[play->cur_idx]);
if (dbg != NULL) if (dbg != NULL)
g_printerr ("ERROR debug information: %s\n", dbg); g_printerr ("ERROR debug information: %s\n", dbg);
g_error_free (err); g_clear_error (&err);
g_free (dbg); g_free (dbg);
/* flush any other error messages from the bus and clean up */ /* flush any other error messages from the bus and clean up */
@ -1139,6 +1139,8 @@ main (int argc, char **argv)
g_option_context_add_group (ctx, gst_init_get_option_group ()); g_option_context_add_group (ctx, gst_init_get_option_group ());
if (!g_option_context_parse (ctx, &argc, &argv, &err)) { if (!g_option_context_parse (ctx, &argc, &argv, &err)) {
g_print ("Error initializing: %s\n", GST_STR_NULL (err->message)); g_print ("Error initializing: %s\n", GST_STR_NULL (err->message));
g_option_context_free (ctx);
g_clear_error (&err);
return 1; return 1;
} }
g_option_context_free (ctx); g_option_context_free (ctx);