diff options
author | Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk> | 2012-08-03 14:10:32 +0200 |
---|---|---|
committer | Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk> | 2012-08-03 14:10:32 +0200 |
commit | a549b0bf2c03eba92e813e0ec24f7f8d5bfba04a (patch) | |
tree | f0a6417665c5f0618a025cc1ffc64a956254a22e | |
parent | 94ab6e17f500be381dfa6aa0e1d20ce73b4d06fe (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.c | 4 |
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 */ |