[farsight2/master] msn: simplify session dispose
Olivier Crête
olivier.crete at collabora.co.uk
Tue Jul 14 09:50:50 PDT 2009
---
gst/fsmsnconference/fs-msn-session.c | 34 +++++++++++++++++-----------------
1 files changed, 17 insertions(+), 17 deletions(-)
diff --git a/gst/fsmsnconference/fs-msn-session.c b/gst/fsmsnconference/fs-msn-session.c
index f5cfd1b..37f3343 100644
--- a/gst/fsmsnconference/fs-msn-session.c
+++ b/gst/fsmsnconference/fs-msn-session.c
@@ -200,20 +200,6 @@ fs_msn_session_init (FsMsnSession *self)
}
static void
-stop_and_remove (GstBin *conf, GstElement **element, gboolean unref)
-{
- if (*element == NULL)
- return;
-
- gst_element_set_locked_state (*element, TRUE);
- gst_element_set_state (*element, GST_STATE_NULL);
- gst_bin_remove (conf, *element);
- if (unref)
- gst_object_unref (*element);
- *element = NULL;
-}
-
-static void
fs_msn_session_dispose (GObject *object)
{
FsMsnSession *self = FS_MSN_SESSION (object);
@@ -225,17 +211,31 @@ fs_msn_session_dispose (GObject *object)
conferencebin = GST_BIN (self->priv->conference);
- stop_and_remove (conferencebin, &self->priv->valve, TRUE);
+ if (!conferencebin)
+ goto out;
if (self->priv->media_sink_pad)
gst_pad_set_active (self->priv->media_sink_pad, FALSE);
- gst_element_remove (self->priv->conferencebin, self->priv->media_sink_pad);
+ if (self->priv->valve)
+ {
+ gst_element_set_locked_state (self->priv->valve, TRUE);
+ gst_element_set_state (self->priv->valve, GST_STATE_NULL);
+ gst_bin_remove (conferencebin, self->priv->valve);
+ }
+ self->priv->valve = NULL;
+
+ if (self->priv->media_sink_pad)
+ gst_element_remove_pad (GST_ELEMENT (self->priv->conference),
+ self->priv->media_sink_pad);
self->priv->media_sink_pad = NULL;
- gst_object_unref (conferencebin);
+ if (conferencebin)
+ gst_object_unref (conferencebin);
self->priv->conference = NULL;
+ out:
+
/* MAKE sure dispose does not run twice. */
self->priv->disposed = TRUE;
--
1.5.6.5
More information about the farsight-commits
mailing list