Commit 1f2cead3 authored by Matthew Booth's avatar Matthew Booth Committed by Kevin Wolf
Browse files

curl: Ensure all informationals are checked for completion



According to the documentation, the correct way to ensure all
informationals have been returned by curl_multi_info_read is to loop
until it returns NULL.

Signed-off-by: default avatarMatthew Booth <mbooth@redhat.com>
Tested-by: default avatarRichard W.M. Jones <rjones@redhat.com>
Signed-off-by: default avatarKevin Wolf <kwolf@redhat.com>
parent 838ef602
Loading
Loading
Loading
Loading
+23 −30
Original line number Diff line number Diff line
@@ -248,18 +248,15 @@ static void curl_multi_check_completion(BDRVCURLState *s)

    /* Try to find done transfers, so we can free the easy
     * handle again. */
    do {
    for (;;) {
        CURLMsg *msg;
        msg = curl_multi_info_read(s->multi, &msgs_in_queue);

        /* Quit when there are no more completions */
        if (!msg)
            break;
        if (msg->msg == CURLMSG_NONE)
            break;

        switch (msg->msg) {
            case CURLMSG_DONE:
            {
        if (msg->msg == CURLMSG_DONE) {
            CURLState *state = NULL;
            curl_easy_getinfo(msg->easy_handle, CURLINFO_PRIVATE,
                              (char **)&state);
@@ -283,11 +280,7 @@ static void curl_multi_check_completion(BDRVCURLState *s)
            curl_clean_state(state);
            break;
        }
            default:
                msgs_in_queue = 0;
                break;
    }
    } while(msgs_in_queue);
}

static void curl_multi_do(void *arg)