mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-11-19 16:21:17 +00:00
rtspsrc: ensure proper closing and cleanup
... since the TEARDOWN sequence might not have had a chance to even start, but at least connections should be closed (synchronously) and state cleaned up. See #632504.
This commit is contained in:
parent
f7ddf811d7
commit
283e4e4afd
1 changed files with 11 additions and 4 deletions
|
@ -251,7 +251,8 @@ static GstRTSPResult gst_rtspsrc_play (GstRTSPSrc * src, GstSegment * segment,
|
||||||
gboolean async);
|
gboolean async);
|
||||||
static GstRTSPResult gst_rtspsrc_pause (GstRTSPSrc * src, gboolean idle,
|
static GstRTSPResult gst_rtspsrc_pause (GstRTSPSrc * src, gboolean idle,
|
||||||
gboolean async);
|
gboolean async);
|
||||||
static GstRTSPResult gst_rtspsrc_close (GstRTSPSrc * src, gboolean async);
|
static GstRTSPResult gst_rtspsrc_close (GstRTSPSrc * src, gboolean async,
|
||||||
|
gboolean only_close);
|
||||||
|
|
||||||
static gboolean gst_rtspsrc_uri_set_uri (GstURIHandler * handler,
|
static gboolean gst_rtspsrc_uri_set_uri (GstURIHandler * handler,
|
||||||
const gchar * uri);
|
const gchar * uri);
|
||||||
|
@ -3927,7 +3928,7 @@ gst_rtspsrc_reconnect (GstRTSPSrc * src, gboolean async)
|
||||||
src->cur_protocols = GST_RTSP_LOWER_TRANS_TCP;
|
src->cur_protocols = GST_RTSP_LOWER_TRANS_TCP;
|
||||||
|
|
||||||
/* close and cleanup our state */
|
/* close and cleanup our state */
|
||||||
if ((res = gst_rtspsrc_close (src, async)) < 0)
|
if ((res = gst_rtspsrc_close (src, async, FALSE)) < 0)
|
||||||
goto done;
|
goto done;
|
||||||
|
|
||||||
/* see if we have TCP left to try. Also don't try TCP when we were configured
|
/* see if we have TCP left to try. Also don't try TCP when we were configured
|
||||||
|
@ -5724,7 +5725,7 @@ open_failed:
|
||||||
}
|
}
|
||||||
|
|
||||||
static GstRTSPResult
|
static GstRTSPResult
|
||||||
gst_rtspsrc_close (GstRTSPSrc * src, gboolean async)
|
gst_rtspsrc_close (GstRTSPSrc * src, gboolean async, gboolean only_close)
|
||||||
{
|
{
|
||||||
GstRTSPMessage request = { 0 };
|
GstRTSPMessage request = { 0 };
|
||||||
GstRTSPMessage response = { 0 };
|
GstRTSPMessage response = { 0 };
|
||||||
|
@ -5739,6 +5740,9 @@ gst_rtspsrc_close (GstRTSPSrc * src, gboolean async)
|
||||||
goto close;
|
goto close;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (only_close)
|
||||||
|
goto close;
|
||||||
|
|
||||||
/* construct a control url */
|
/* construct a control url */
|
||||||
if (src->control)
|
if (src->control)
|
||||||
control = src->control;
|
control = src->control;
|
||||||
|
@ -6426,7 +6430,7 @@ gst_rtspsrc_thread (GstRTSPSrc * src)
|
||||||
running = TRUE;
|
running = TRUE;
|
||||||
break;
|
break;
|
||||||
case CMD_CLOSE:
|
case CMD_CLOSE:
|
||||||
ret = gst_rtspsrc_close (src, TRUE);
|
ret = gst_rtspsrc_close (src, TRUE, FALSE);
|
||||||
break;
|
break;
|
||||||
case CMD_LOOP:
|
case CMD_LOOP:
|
||||||
running = gst_rtspsrc_loop (src);
|
running = gst_rtspsrc_loop (src);
|
||||||
|
@ -6510,6 +6514,9 @@ gst_rtspsrc_stop (GstRTSPSrc * src)
|
||||||
}
|
}
|
||||||
GST_OBJECT_UNLOCK (src);
|
GST_OBJECT_UNLOCK (src);
|
||||||
|
|
||||||
|
/* ensure synchronously all is closed and clean */
|
||||||
|
gst_rtspsrc_close (src, FALSE, TRUE);
|
||||||
|
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue