playbin3: fix leaks of collection returned by message parse API
authorGuillaume Desmottes <guillaume.desmottes@collabora.co.uk>
Wed, 13 Jul 2016 14:02:25 +0000 (16:02 +0200)
committerTim-Philipp Müller <tim@centricular.com>
Fri, 15 Jul 2016 15:43:07 +0000 (16:43 +0100)
gst_message_parse_stream_collection() and
gst_message_parse_streams_selected() actually return a reffed
GstStreamCollection.

https://bugzilla.gnome.org/show_bug.cgi?id=768776

gst/playback/gstdecodebin3.c
gst/playback/gstplaybin3.c
tests/examples/decodebin_next/decodebin3.c
tests/examples/decodebin_next/playbin-test.c

index 1cdcc83..ae1923c 100644 (file)
@@ -1182,6 +1182,8 @@ gst_decodebin3_handle_message (GstBin * bin, GstMessage * message)
         gst_message_unref (message);
         message = new_msg;
       }
+      if (collection)
+        gst_object_unref (collection);
       break;
     }
     default:
index 7a3f163..a68a722 100644 (file)
@@ -3102,6 +3102,7 @@ gst_play_bin3_handle_message (GstBin * bin, GstMessage * msg)
       GST_PLAY_BIN3_UNLOCK (playbin);
 
       notify_all_streams (playbin, collection);
+      gst_object_unref (collection);
     }
   } else if (GST_MESSAGE_TYPE (msg) == GST_MESSAGE_STREAMS_SELECTED) {
     GstStreamCollection *collection = NULL;
@@ -3138,6 +3139,7 @@ gst_play_bin3_handle_message (GstBin * bin, GstMessage * msg)
       GST_PLAY_BIN3_UNLOCK (playbin);
 
       notify_all_streams (playbin, collection);
+      gst_object_unref (collection);
     }
   }
 
index 2eb2a68..53a8249 100644 (file)
@@ -223,6 +223,7 @@ _on_bus_message (GstBus * bus, GstMessage * message, MyDataStruct * data)
           /* In 5s try to change streams */
           data->timeout_id =
               g_timeout_add_seconds (5, (GSourceFunc) switch_streams, data);
+        gst_object_unref (collection);
       }
       break;
     }
index d8e9a88..38a328c 100644 (file)
@@ -217,6 +217,7 @@ _on_bus_message (GstBus * bus, GstMessage * message, MyDataStruct * data)
           /* In 5s try to change streams */
           data->timeout_id =
               g_timeout_add_seconds (5, (GSourceFunc) switch_streams, data);
+        gst_object_unref (collection);
       }
       break;
     }