Commit c84282b9 authored by Thiago Santos's avatar Thiago Santos Committed by Sebastian Dröge

souphttpsrc: do not do http requests in READY

HEAD requests to discover if the server is seekable shouldn't be done in
READY as it might lock the main thread that is doing the state change.

https://bugzilla.gnome.org/show_bug.cgi?id=705371
parent 6bb26264
......@@ -1384,17 +1384,16 @@ gst_soup_http_src_get_size (GstBaseSrc * bsrc, guint64 * size)
return FALSE;
}
static gboolean
gst_soup_http_src_is_seekable (GstBaseSrc * bsrc)
static void
gst_soup_http_src_check_seekable (GstSoupHTTPSrc * src)
{
GstSoupHTTPSrc *src = GST_SOUP_HTTP_SRC (bsrc);
GstFlowReturn ret = GST_FLOW_OK;
/* Special case to check if the server allows range requests
* before really starting to get data in the buffer creation
* loops.
*/
if (!src->got_headers && GST_STATE (src) != GST_STATE_NULL) {
if (!src->got_headers && GST_STATE (src) >= GST_STATE_PAUSED) {
g_mutex_lock (&src->mutex);
while (!src->got_headers && !src->interrupted && ret == GST_FLOW_OK) {
if ((src->msg && src->msg->method != SOUP_METHOD_HEAD) &&
......@@ -1416,6 +1415,15 @@ gst_soup_http_src_is_seekable (GstBaseSrc * bsrc)
g_mutex_unlock (&src->mutex);
}
}
static gboolean
gst_soup_http_src_is_seekable (GstBaseSrc * bsrc)
{
GstSoupHTTPSrc *src = GST_SOUP_HTTP_SRC (bsrc);
gst_soup_http_src_check_seekable (src);
return src->seekable;
}
......@@ -1434,7 +1442,11 @@ gst_soup_http_src_do_seek (GstBaseSrc * bsrc, GstSegment * segment)
return TRUE;
}
if (!src->seekable) {
gst_soup_http_src_check_seekable (src);
/* If we have no headers we don't know yet if it is seekable or not.
* Store the start position and error out later if it isn't */
if (src->got_headers && !src->seekable) {
GST_WARNING_OBJECT (src, "Not seekable");
return FALSE;
}
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment