From: Ognyan Tonchev Date: Thu, 12 Jun 2014 11:49:17 +0000 (+0200) Subject: client: ref the context until rtsp watch is alive X-Git-Tag: 1.19.3~495^2~794 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=f2b1aa8c817e78ff255c47d6f5637d528b7e2944;p=platform%2Fupstream%2Fgstreamer.git client: ref the context until rtsp watch is alive Fixes https://bugzilla.gnome.org/show_bug.cgi?id=731569 --- diff --git a/gst/rtsp-server/rtsp-client.c b/gst/rtsp-server/rtsp-client.c index 4a8214f..cf79bda 100644 --- a/gst/rtsp-server/rtsp-client.c +++ b/gst/rtsp-server/rtsp-client.c @@ -61,6 +61,7 @@ struct _GstRTSPClientPrivate GMutex send_lock; GstRTSPConnection *connection; GstRTSPWatch *watch; + GMainContext *watch_context; guint close_seq; gchar *server_ip; gboolean is_ipv6; @@ -364,6 +365,9 @@ gst_rtsp_client_finalize (GObject * obj) if (priv->watch) g_source_destroy ((GSource *) priv->watch); + if (priv->watch_context) + g_main_context_unref (priv->watch_context); + client_cleanup_sessions (client); if (priv->connection) @@ -3230,6 +3234,8 @@ handle_tunnel (GstRTSPClient * client) /* the old client owns the tunnel now, the new one will be freed */ g_source_destroy ((GSource *) priv->watch); priv->watch = NULL; + g_main_context_unref (priv->watch_context); + priv->watch_context = NULL; gst_rtsp_client_set_send_func (client, NULL, NULL, NULL); } @@ -3314,6 +3320,8 @@ client_watch_notify (GstRTSPClient * client) GST_INFO ("client %p: watch destroyed", client); priv->watch = NULL; + g_main_context_unref (priv->watch_context); + priv->watch_context = NULL; g_signal_emit (client, gst_rtsp_client_signals[SIGNAL_CLOSED], 0, NULL); g_object_unref (client); } @@ -3343,6 +3351,9 @@ gst_rtsp_client_attach (GstRTSPClient * client, GMainContext * context) g_return_val_if_fail (priv->connection != NULL, 0); g_return_val_if_fail (priv->watch == NULL, 0); + /* make sure noone will free the context before the watch is destroyed */ + priv->watch_context = g_main_context_ref (context); + /* create watch for the connection and attach */ priv->watch = gst_rtsp_watch_new (priv->connection, &watch_funcs, g_object_ref (client), (GDestroyNotify) client_watch_notify);