summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>2012-08-03 14:10:32 +0200
committerMark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>2012-08-03 14:10:32 +0200
commita549b0bf2c03eba92e813e0ec24f7f8d5bfba04a (patch)
treef0a6417665c5f0618a025cc1ffc64a956254a22e
parent94ab6e17f500be381dfa6aa0e1d20ce73b4d06fe (diff)
rtspsrc: manage race between connection closing and flushing
... where the former can happen in task thread and the latter in mainloop upon downward state change.
-rw-r--r--gst/rtsp/gstrtspsrc.c4
1 files changed, 4 insertions, 0 deletions
diff --git a/gst/rtsp/gstrtspsrc.c b/gst/rtsp/gstrtspsrc.c
index 9eda544ce..4a0e4d17f 100644
--- a/gst/rtsp/gstrtspsrc.c
+++ b/gst/rtsp/gstrtspsrc.c
@@ -3332,6 +3332,7 @@ static GstRTSPResult
gst_rtsp_conninfo_close (GstRTSPSrc * src, GstRTSPConnInfo * info,
gboolean free)
{
+ GST_RTSP_STATE_LOCK (src);
if (info->connected) {
GST_DEBUG_OBJECT (src, "closing connection...");
gst_rtsp_connection_close (info->connection);
@@ -3343,6 +3344,7 @@ gst_rtsp_conninfo_close (GstRTSPSrc * src, GstRTSPConnInfo * info,
gst_rtsp_connection_free (info->connection);
info->connection = NULL;
}
+ GST_RTSP_STATE_UNLOCK (src);
return GST_RTSP_OK;
}
@@ -3365,6 +3367,7 @@ gst_rtspsrc_connection_flush (GstRTSPSrc * src, gboolean flush)
GList *walk;
GST_DEBUG_OBJECT (src, "set flushing %d", flush);
+ GST_RTSP_STATE_LOCK (src);
if (src->conninfo.connection) {
GST_DEBUG_OBJECT (src, "connection flush");
gst_rtsp_connection_flush (src->conninfo.connection, flush);
@@ -3375,6 +3378,7 @@ gst_rtspsrc_connection_flush (GstRTSPSrc * src, gboolean flush)
if (stream->conninfo.connection)
gst_rtsp_connection_flush (stream->conninfo.connection, flush);
}
+ GST_RTSP_STATE_UNLOCK (src);
}
/* FIXME, handle server request, reply with OK, for now */