[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[qemu-xen staging-4.13] curl: Check completion in curl_multi_do()



commit 4be97ef966f5d88a64bcc359d2c72152bc08b322
Author:     Max Reitz <mreitz@xxxxxxxxxx>
AuthorDate: Tue Sep 10 14:41:32 2019 +0200
Commit:     Michael Roth <mdroth@xxxxxxxxxxxxxxxxxx>
CommitDate: Wed Oct 30 11:34:26 2019 -0500

    curl: Check completion in curl_multi_do()
    
    While it is more likely that transfers complete after some file
    descriptor has data ready to read, we probably should not rely on it.
    Better be safe than sorry and call curl_multi_check_completion() in
    curl_multi_do(), too, just like it is done in curl_multi_read().
    
    With this change, curl_multi_do() and curl_multi_read() are actually the
    same, so drop curl_multi_read() and use curl_multi_do() as the sole FD
    handler.
    
    Signed-off-by: Max Reitz <mreitz@xxxxxxxxxx>
    Message-id: 20190910124136.10565-4-mreitz@xxxxxxxxxx
    Reviewed-by: Maxim Levitsky <mlevitsk@xxxxxxxxxx>
    Reviewed-by: John Snow <jsnow@xxxxxxxxxx>
    Signed-off-by: Max Reitz <mreitz@xxxxxxxxxx>
    (cherry picked from commit 948403bcb1c7e71dcbe8ab8479cf3934a0efcbb5)
    Signed-off-by: Michael Roth <mdroth@xxxxxxxxxxxxxxxxxx>
---
 block/curl.c | 14 ++------------
 1 file changed, 2 insertions(+), 12 deletions(-)

diff --git a/block/curl.c b/block/curl.c
index 95d7b77dc0..5838afef99 100644
--- a/block/curl.c
+++ b/block/curl.c
@@ -139,7 +139,6 @@ typedef struct BDRVCURLState {
 
 static void curl_clean_state(CURLState *s);
 static void curl_multi_do(void *arg);
-static void curl_multi_read(void *arg);
 
 #ifdef NEED_CURL_TIMER_CALLBACK
 /* Called from curl_multi_do_locked, with s->mutex held.  */
@@ -186,7 +185,7 @@ static int curl_sock_cb(CURL *curl, curl_socket_t fd, int 
action,
     switch (action) {
         case CURL_POLL_IN:
             aio_set_fd_handler(s->aio_context, fd, false,
-                               curl_multi_read, NULL, NULL, state);
+                               curl_multi_do, NULL, NULL, state);
             break;
         case CURL_POLL_OUT:
             aio_set_fd_handler(s->aio_context, fd, false,
@@ -194,7 +193,7 @@ static int curl_sock_cb(CURL *curl, curl_socket_t fd, int 
action,
             break;
         case CURL_POLL_INOUT:
             aio_set_fd_handler(s->aio_context, fd, false,
-                               curl_multi_read, curl_multi_do, NULL, state);
+                               curl_multi_do, curl_multi_do, NULL, state);
             break;
         case CURL_POLL_REMOVE:
             aio_set_fd_handler(s->aio_context, fd, false,
@@ -418,15 +417,6 @@ static void curl_multi_do(void *arg)
 
     qemu_mutex_lock(&s->s->mutex);
     curl_multi_do_locked(s);
-    qemu_mutex_unlock(&s->s->mutex);
-}
-
-static void curl_multi_read(void *arg)
-{
-    CURLState *s = (CURLState *)arg;
-
-    qemu_mutex_lock(&s->s->mutex);
-    curl_multi_do_locked(s);
     curl_multi_check_completion(s->s);
     qemu_mutex_unlock(&s->s->mutex);
 }
--
generated by git-patchbot for /home/xen/git/qemu-xen.git#staging-4.13



 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.