rtsp-client: No flush during Teardown.

When calling gst_rtsp_watch_write_data in gstrtspconnection.c and
backlog is empty it can happen that just a part of a message will be
sent and rest is in backlog queue. If then flush during teardown
just a part of message will be sent.This can lead to client miss
teardown response since it expect to get the last part of message.

The flushing during teardown was introduced to fix a deadlock that now
is fixed more generally in handle_request by temporary  setting backlog
size to unlimited.

Fixes https://bugzilla.gnome.org/show_bug.cgi?id=749845
This commit is contained in:
Göran Jönsson 2015-05-25 16:36:18 +02:00 committed by Wim Taymans
parent 550348738c
commit 08e0c79cee

View file

@ -839,17 +839,8 @@ handle_teardown_request (GstRTSPClient * client, GstRTSPContext * ctx)
g_signal_emit (client, gst_rtsp_client_signals[SIGNAL_TEARDOWN_REQUEST],
0, ctx);
/* make sure we unblock the backlog and don't accept new messages
* on the watch */
if (priv->watch != NULL)
gst_rtsp_watch_set_flushing (priv->watch, TRUE);
gst_rtsp_session_media_set_state (sessmedia, GST_STATE_NULL);
/* allow messages again so that we can send the reply */
if (priv->watch != NULL)
gst_rtsp_watch_set_flushing (priv->watch, FALSE);
/* unmanage the media in the session, returns false if all media session
* are torn down. */
keep_session = gst_rtsp_session_release_media (session, sessmedia);