mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-11-18 15:51:11 +00:00
gst/rtsp/gstrtspsrc.c: Fix race when pausing a RTSP stream in interleaved.
Original commit message from CVS: Patch by: Tommi Myöhänen <ext-tommi dot myohanen at nokia dot com> * gst/rtsp/gstrtspsrc.c: (gst_rtspsrc_loop_interleaved): Fix race when pausing a RTSP stream in interleaved. Fixes #475784.
This commit is contained in:
parent
68bf754d0e
commit
56e63b4488
2 changed files with 25 additions and 0 deletions
|
@ -1,3 +1,11 @@
|
|||
2007-10-22 Wim Taymans <wim.taymans@gmail.com>
|
||||
|
||||
Patch by: Tommi Myöhänen <ext-tommi dot myohanen at nokia dot com>
|
||||
|
||||
* gst/rtsp/gstrtspsrc.c: (gst_rtspsrc_loop_interleaved):
|
||||
Fix race when pausing a RTSP stream in interleaved.
|
||||
Fixes #475784.
|
||||
|
||||
2007-10-22 Wim Taymans <wim.taymans@gmail.com>
|
||||
|
||||
Patch by: Peter Kjellerstedt <pkj at axis com>
|
||||
|
|
|
@ -2459,9 +2459,21 @@ gst_rtspsrc_loop_interleaved (GstRTSPSrc * src)
|
|||
|
||||
GST_DEBUG_OBJECT (src, "doing receive");
|
||||
|
||||
/* We need to check if playback has been paused while we have been
|
||||
* doing something else in our own GstTask (e.g. pushing buffer). There
|
||||
* is a slight chance that we have just received data buffer when PAUSE
|
||||
* state change happens (in another thread). In this case we well be
|
||||
* totally ignorant of that unless we explicitly check it here. */
|
||||
GST_RTSP_STATE_LOCK (src);
|
||||
if (src->state == GST_RTSP_STATE_READY) {
|
||||
/* We are looping in a paused mode */
|
||||
GST_RTSP_STATE_UNLOCK (src);
|
||||
goto already_paused;
|
||||
}
|
||||
/* protect the connection with the connection lock so that we can see when
|
||||
* we are finished doing server communication */
|
||||
res = gst_rtspsrc_connection_receive (src, &message, src->ptcp_timeout);
|
||||
GST_RTSP_STATE_UNLOCK (src);
|
||||
|
||||
switch (res) {
|
||||
case GST_RTSP_OK:
|
||||
|
@ -2634,6 +2646,11 @@ interrupt:
|
|||
gst_rtsp_connection_flush (src->connection, FALSE);
|
||||
return GST_FLOW_WRONG_STATE;
|
||||
}
|
||||
already_paused:
|
||||
{
|
||||
GST_DEBUG_OBJECT (src, "got interrupted: playback already paused");
|
||||
return GST_FLOW_WRONG_STATE;
|
||||
}
|
||||
receive_error:
|
||||
{
|
||||
gchar *str = gst_rtsp_strresult (res);
|
||||
|
|
Loading…
Reference in a new issue