uridownloader: Fix race condition between EOS handling and downloading a range
authorDuncan Palmer <dpalmer@digisoft.tv>
Tue, 4 Feb 2014 11:52:25 +0000 (12:52 +0100)
committerSebastian Dröge <sebastian@centricular.com>
Tue, 4 Feb 2014 16:25:58 +0000 (17:25 +0100)
https://bugzilla.gnome.org/show_bug.cgi?id=723134

gst-libs/gst/uridownloader/gsturidownloader.c

index 3c6dbc9e2410a9d5e83c482cbb7ee80ab27d5961..afd4c3e3ae8331d9da48b20eb4ed26895b09185e 100644 (file)
@@ -210,6 +210,7 @@ gst_uri_downloader_bus_handler (GstBus * bus,
       GST_DEBUG_OBJECT (downloader, "Stopping download");
       g_object_unref (downloader->priv->download);
       downloader->priv->download = NULL;
+      downloader->priv->cancelled = TRUE;
       g_cond_signal (&downloader->priv->cond);
     }
     GST_OBJECT_UNLOCK (downloader);
@@ -409,7 +410,8 @@ gst_uri_downloader_fetch_uri_with_range (GstUriDownloader * downloader,
    *   - the download was canceled
    */
   GST_DEBUG_OBJECT (downloader, "Waiting to fetch the URI %s", uri);
-  g_cond_wait (&downloader->priv->cond, GST_OBJECT_GET_LOCK (downloader));
+  while (!downloader->priv->cancelled && !downloader->priv->download->completed)
+    g_cond_wait (&downloader->priv->cond, GST_OBJECT_GET_LOCK (downloader));
 
   if (downloader->priv->cancelled) {
     if (downloader->priv->download) {