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: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/9060>
This commit is contained in:
parent
cedeef3cb1
commit
c14b135861
@ -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);
|
||||
|
Loading…
x
Reference in New Issue
Block a user