From: Sebastian Dröge Date: Thu, 12 Feb 2015 14:48:46 +0000 (+0200) Subject: rtsp-media: If seeking fails, don't wait forever for the media to preroll again X-Git-Tag: 1.19.3~495^2~680 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=98b162f54b9168fe0745ddab98163d07109ca208;p=platform%2Fupstream%2Fgstreamer.git rtsp-media: If seeking fails, don't wait forever for the media to preroll again Instead error out properly the same way as if the SEEKING query already failed. --- diff --git a/gst/rtsp-server/rtsp-client.c b/gst/rtsp-server/rtsp-client.c index 1d9610a..8e8f73a 100644 --- a/gst/rtsp-server/rtsp-client.c +++ b/gst/rtsp-server/rtsp-client.c @@ -1165,7 +1165,10 @@ handle_play_request (GstRTSPClient * client, GstRTSPContext * ctx) if (gst_rtsp_range_parse (str, &range) == GST_RTSP_OK) { /* we have a range, seek to the position */ unit = range->unit; - gst_rtsp_media_seek (media, range); + if (!gst_rtsp_media_seek (media, range)) { + gst_rtsp_range_free (range); + goto seek_failed; + } gst_rtsp_range_free (range); } } @@ -1239,6 +1242,12 @@ unsuspend_failed: send_generic_response (client, GST_RTSP_STS_SERVICE_UNAVAILABLE, ctx); return FALSE; } +seek_failed: + { + GST_ERROR ("client %p: seek failed", client); + send_generic_response (client, GST_RTSP_STS_SERVICE_UNAVAILABLE, ctx); + return FALSE; + } unsupported_mode: { GST_ERROR ("client %p: media does not support PLAY", client); diff --git a/gst/rtsp-server/rtsp-media.c b/gst/rtsp-server/rtsp-media.c index 0e94e52..f97490b 100644 --- a/gst/rtsp-server/rtsp-media.c +++ b/gst/rtsp-server/rtsp-media.c @@ -1952,6 +1952,9 @@ gst_rtsp_media_seek (GstRTSPMedia * media, GstRTSPTimeRange * range) /* and block for the seek to complete */ GST_INFO ("done seeking %d", res); + if (!res) + goto seek_failed; + g_rec_mutex_unlock (&priv->state_lock); /* wait until pipeline is prerolled again, this will also collect stats */ @@ -1987,6 +1990,12 @@ not_supported: GST_WARNING ("conversion to npt not supported"); return FALSE; } +seek_failed: + { + g_rec_mutex_unlock (&priv->state_lock); + GST_INFO ("seeking failed"); + return FALSE; + } preroll_failed: { GST_WARNING ("failed to preroll after seek");