diff options
author | Göran Jönsson <goranjn@axis.com> | 2016-09-26 11:16:04 +0200 |
---|---|---|
committer | Sebastian Dröge <sebastian@centricular.com> | 2016-10-25 12:55:59 +0300 |
commit | dbf91ab231ad793646c6de540f105b4b24db9f25 (patch) | |
tree | 5834ca3e5ef438f9e13d5d0b8ee41dfcd43e0051 | |
parent | 34ed1d0bea92691a9aa06d9973a26534fb539cd7 (diff) | |
download | gstreamer-dbf91ab231ad793646c6de540f105b4b24db9f25.tar.gz |
rtsp-client: Session filter in unwatch session
Call session filter with filter_session_media as paramer in
client_unwatch_session if using drop_backlog = FALSE.
In client_unwatch_session its allowed to grow the watchs backlog.
If using drop_backlog = FALSE and the backlog is full it will cause
a deadlock when setting session media state to NULL
if the backlog is not allowed to grow.
https://bugzilla.gnome.org/show_bug.cgi?id=771983
-rw-r--r-- | gst/rtsp-server/rtsp-client.c | 14 |
1 files changed, 11 insertions, 3 deletions
diff --git a/gst/rtsp-server/rtsp-client.c b/gst/rtsp-server/rtsp-client.c index e1e5338cc1..deb2ab3403 100644 --- a/gst/rtsp-server/rtsp-client.c +++ b/gst/rtsp-server/rtsp-client.c @@ -416,6 +416,11 @@ client_unwatch_session (GstRTSPClient * client, GstRTSPSession * session, priv->session_removed_id = 0; } + if (!priv->drop_backlog) { + /* unlink all media managed in this session */ + gst_rtsp_session_filter (session, filter_session_media, client); + } + /* remove the session */ g_object_unref (session); } @@ -425,10 +430,13 @@ cleanup_session (GstRTSPClient * client, GstRTSPSession * sess, gpointer user_data) { gboolean *closed = user_data; + GstRTSPClientPrivate *priv = client->priv; - /* unlink all media managed in this session. This needs to happen - * without the client lock, so we really want to do it here. */ - gst_rtsp_session_filter (sess, filter_session_media, user_data); + if (priv->drop_backlog) { + /* unlink all media managed in this session. This needs to happen + * without the client lock, so we really want to do it here. */ + gst_rtsp_session_filter (sess, filter_session_media, user_data); + } if (*closed) return GST_RTSP_FILTER_REMOVE; |