From c14b135861b6fcde5c1fbba5bafe9b27f957e757 Mon Sep 17 00:00:00 2001 From: Doug Nazar Date: Fri, 23 May 2025 05:07:38 -0400 Subject: [PATCH] adaptivedemux2: Ensure all download tasks call g_task_return_*() There is a small window during stopping when tasks have been add to the transfer_requests queue, but never transfered to the active_transfers array and causes the fallowing error: GTask 0x7f2c4400e930 (source object: (nil), source tag: (nil)) finalized without ever returning (using g_task_return_*()). This potentially indicates a bug in the program. Part-of: --- .../ext/adaptivedemux2/downloadhelper.c | 22 +++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/subprojects/gst-plugins-good/ext/adaptivedemux2/downloadhelper.c b/subprojects/gst-plugins-good/ext/adaptivedemux2/downloadhelper.c index 7e7c108a4d..7a427e7ba3 100644 --- a/subprojects/gst-plugins-good/ext/adaptivedemux2/downloadhelper.c +++ b/subprojects/gst-plugins-good/ext/adaptivedemux2/downloadhelper.c @@ -1021,6 +1021,28 @@ downloadhelper_stop (DownloadHelper * dh) * and need cleaning up */ g_mutex_lock (&dh->transfer_lock); + while (1) { + GTask *transfer_task; + DownloadHelperTransfer *transfer; + DownloadRequest *request; + + transfer_task = g_async_queue_try_pop (dh->transfer_requests); + if (!transfer_task) + break; + + transfer = g_task_get_task_data (transfer_task); + request = transfer->request; + + download_request_lock (request); + request->state = DOWNLOAD_REQUEST_STATE_UNSENT; + request->in_use = FALSE; + download_request_unlock (request); + + g_cancellable_cancel (g_task_get_cancellable (transfer_task)); + g_task_return_error_if_cancelled (transfer_task); + g_object_unref (transfer_task); + }; + for (i = 0; i < dh->active_transfers->len; i++) { GTask *transfer_task = g_array_index (dh->active_transfers, GTask *, i); DownloadHelperTransfer *transfer = g_task_get_task_data (transfer_task);