gst/playback/gstdecodebin2.c: Don't free groups from the streaming threads. Just put them aside and free them in disp...

Original commit message from CVS:
* gst/playback/gstdecodebin2.c: (gst_decode_bin_dispose),
(multi_queue_underrun_cb), (gst_decode_group_check_if_drained),
(sort_end_pads), (gst_decode_group_expose),
(gst_decode_group_hide):
Don't free groups from the streaming threads. Just put them aside and
free them in dispose.
This commit is contained in:
Edward Hervey 2007-02-20 15:44:32 +00:00
parent 7746c2f176
commit 7bc6fc07a1
2 changed files with 20 additions and 2 deletions

View file

@ -1,3 +1,12 @@
2007-02-20 Edward Hervey <edward@fluendo.com>
* gst/playback/gstdecodebin2.c: (gst_decode_bin_dispose),
(multi_queue_underrun_cb), (gst_decode_group_check_if_drained),
(sort_end_pads), (gst_decode_group_expose),
(gst_decode_group_hide):
Don't free groups from the streaming threads. Just put them aside and
free them in dispose.
2007-02-20 Edward Hervey <edward@fluendo.com> 2007-02-20 Edward Hervey <edward@fluendo.com>
* gst/playback/gstdecodebin2.c: (connect_element), * gst/playback/gstdecodebin2.c: (connect_element),

View file

@ -71,6 +71,8 @@ struct _GstDecodeBin
GstDecodeGroup *activegroup; /* group currently active */ GstDecodeGroup *activegroup; /* group currently active */
GList *groups; /* List of non-active GstDecodeGroups, sorted in GList *groups; /* List of non-active GstDecodeGroups, sorted in
* order of creation. */ * order of creation. */
GList *oldgroups; /* List of no-longer-used GstDecodeGroups.
* Should be freed in dispose */
gint nbpads; /* unique identifier for source pads */ gint nbpads; /* unique identifier for source pads */
GstCaps *caps; /* caps on which to stop decoding */ GstCaps *caps; /* caps on which to stop decoding */
@ -497,6 +499,14 @@ gst_decode_bin_dispose (GObject * object)
g_list_free (decode_bin->groups); g_list_free (decode_bin->groups);
decode_bin->groups = NULL; decode_bin->groups = NULL;
for (tmp = decode_bin->oldgroups; tmp; tmp = g_list_next (tmp)) {
GstDecodeGroup *group = (GstDecodeGroup *) tmp->data;
gst_decode_group_free (group);
}
g_list_free (decode_bin->oldgroups);
decode_bin->oldgroups = NULL;
if (decode_bin->caps) if (decode_bin->caps)
gst_caps_unref (decode_bin->caps); gst_caps_unref (decode_bin->caps);
decode_bin->caps = NULL; decode_bin->caps = NULL;
@ -1269,7 +1279,6 @@ multi_queue_underrun_cb (GstElement * queue, GstDecodeGroup * group)
GST_DEBUG_OBJECT (dbin, "Switching to new group"); GST_DEBUG_OBJECT (dbin, "Switching to new group");
/* unexpose current active */ /* unexpose current active */
gst_decode_group_hide (group); gst_decode_group_hide (group);
gst_decode_group_free (group);
/* expose first group of groups */ /* expose first group of groups */
gst_decode_group_expose ((GstDecodeGroup *) dbin->groups->data); gst_decode_group_expose ((GstDecodeGroup *) dbin->groups->data);
@ -1518,7 +1527,6 @@ gst_decode_group_check_if_drained (GstDecodeGroup * group)
GST_DEBUG_OBJECT (dbin, "Switching to new group"); GST_DEBUG_OBJECT (dbin, "Switching to new group");
gst_decode_group_hide (group); gst_decode_group_hide (group);
gst_decode_group_free (group);
gst_decode_group_expose ((GstDecodeGroup *) dbin->groups->data); gst_decode_group_expose ((GstDecodeGroup *) dbin->groups->data);
} }
@ -1704,6 +1712,7 @@ gst_decode_group_hide (GstDecodeGroup * group)
GROUP_MUTEX_UNLOCK (group); GROUP_MUTEX_UNLOCK (group);
group->dbin->activegroup = NULL; group->dbin->activegroup = NULL;
group->dbin->oldgroups = g_list_append (group->dbin->oldgroups, group);
} }
static void static void