mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-12-25 09:40:37 +00:00
client: ref the context until rtsp watch is alive
Fixes https://bugzilla.gnome.org/show_bug.cgi?id=731569
This commit is contained in:
parent
9715252588
commit
f2b1aa8c81
1 changed files with 11 additions and 0 deletions
|
@ -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);
|
||||
|
|
Loading…
Reference in a new issue