DownloadCallbacks: Ensure end
for every successful add_new_download
#1814
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
For every successful (ended without exception) call of
add_new_download
callback, theend
callback is called once.The code relied on librepo to call the
end
callback just once for eachlr_target
. Which works under normal conditions. But if there is an interruption in the librepo download (error, signal received) librepo will not callend
callbacks for targets that have not yet started downloading. However, theadd_new_download
callback has already been called for them. For example, if a higher layer allocated resources onadd_new_download
and deallocated onend
, resources would be lost.The new code tracks this and calls the appropriate
end
callbacks. Also, an assert has been added to monitor for any attempt to double call theend
callback.