From d33057a031ded9ce52b0113523113211f279b963 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20Dr=C3=B6ge?= Date: Mon, 27 Apr 2020 19:47:15 +0300 Subject: [PATCH] rtsp-client: Don't ever close the client connection directly when a session is torn down There might be other sessions that are running over the same RTSP connection and we should not simply close the client directly if one of them is torn down. By default the connection will be closed once the client closes it or the OS does. This behaviour can be adjusted with the post-session-timeout property, which allows to close it automatically from the server side after all sessions are gone and the given timeout is reached. This reverts the previous commit. Part-of: --- gst/rtsp-server/rtsp-client.c | 30 ------------------------------ 1 file changed, 30 deletions(-) diff --git a/gst/rtsp-server/rtsp-client.c b/gst/rtsp-server/rtsp-client.c index 023269610f..9d15db0738 100644 --- a/gst/rtsp-server/rtsp-client.c +++ b/gst/rtsp-server/rtsp-client.c @@ -84,7 +84,6 @@ struct _GstRTSPClientPrivate GstRTSPClientSendMessagesFunc send_messages_func; gpointer send_messages_data; GDestroyNotify send_messages_notify; - guint close_seq; GArray *data_seqs; GstRTSPSessionPool *session_pool; @@ -608,7 +607,6 @@ gst_rtsp_client_init (GstRTSPClient * client) g_mutex_init (&priv->lock); g_mutex_init (&priv->send_lock); g_mutex_init (&priv->watch_lock); - priv->close_seq = 0; priv->data_seqs = g_array_new (FALSE, FALSE, sizeof (DataSeq)); priv->drop_backlog = DEFAULT_DROP_BACKLOG; priv->post_session_timeout = DEFAULT_POST_SESSION_TIMEOUT; @@ -4784,7 +4782,6 @@ do_send_messages (GstRTSPClient * client, GstRTSPMessage * messages, guint id = 0; GstRTSPResult ret; guint i; - gboolean closed = FALSE; /* send the message */ if (close) @@ -4794,15 +4791,6 @@ do_send_messages (GstRTSPClient * client, GstRTSPMessage * messages, if (ret != GST_RTSP_OK) goto error; - /* if close flag is set, store the seq number so we can wait until it's - * written to the client to close the connection */ - if (close) - priv->close_seq = id; - /* if the returned id is 0 then the TEARDOWN was already sent directly and - * we don't have to wait for it asynchronously */ - if (closed && id == 0) - closed = TRUE; - for (i = 0; i < n_messages; i++) { if (gst_rtsp_message_get_type (&messages[i]) == GST_RTSP_MESSAGE_DATA) { guint8 channel = 0; @@ -4839,13 +4827,6 @@ do_send_messages (GstRTSPClient * client, GstRTSPMessage * messages, } } - if (closed) { - GST_INFO ("client %p: sent close message", client); - g_mutex_unlock (&priv->send_lock); - gst_rtsp_client_close (client); - g_mutex_lock (&priv->send_lock); - } - return ret == GST_RTSP_OK; /* ERRORS */ @@ -4870,7 +4851,6 @@ message_sent (GstRTSPWatch * watch, guint cseq, gpointer user_data) GstRTSPClientPrivate *priv = client->priv; GstRTSPStreamTransport *trans = NULL; guint8 channel = 0; - gboolean close = FALSE; g_mutex_lock (&priv->send_lock); @@ -4878,13 +4858,6 @@ message_sent (GstRTSPWatch * watch, guint cseq, gpointer user_data) trans = g_hash_table_lookup (priv->transports, GINT_TO_POINTER (channel)); set_data_seq (client, channel, 0); } - - if (priv->close_seq && priv->close_seq == cseq) { - GST_INFO ("client %p: sent close message", client); - close = TRUE; - priv->close_seq = 0; - } - g_mutex_unlock (&priv->send_lock); if (trans) { @@ -4892,9 +4865,6 @@ message_sent (GstRTSPWatch * watch, guint cseq, gpointer user_data) gst_rtsp_stream_transport_message_sent (trans); } - if (close) - gst_rtsp_client_close (client); - return GST_RTSP_OK; }