yeahuh / rpms / qemu-kvm

Forked from rpms/qemu-kvm 2 years ago
Clone
4ec855
From a09766bbc8a4208fc0f62904cebec4022beba6b0 Mon Sep 17 00:00:00 2001
4ec855
From: Max Reitz <mreitz@redhat.com>
4ec855
Date: Tue, 19 Nov 2019 15:29:56 +0000
4ec855
Subject: [PATCH 4/8] curl: Check completion in curl_multi_do()
4ec855
MIME-Version: 1.0
4ec855
Content-Type: text/plain; charset=UTF-8
4ec855
Content-Transfer-Encoding: 8bit
4ec855
4ec855
RH-Author: Max Reitz <mreitz@redhat.com>
4ec855
Message-id: <20191119153000.101646-4-mreitz@redhat.com>
4ec855
Patchwork-id: 92516
4ec855
O-Subject: [RHEL-8.2.0 qemu-kvm PATCH 3/7] curl: Check completion in curl_multi_do()
4ec855
Bugzilla: 1744602
4ec855
RH-Acked-by: Maxim Levitsky <mlevitsk@redhat.com>
4ec855
RH-Acked-by: Philippe Mathieu-Daudé <philmd@redhat.com>
4ec855
RH-Acked-by: Stefano Garzarella <sgarzare@redhat.com>
4ec855
4ec855
While it is more likely that transfers complete after some file
4ec855
descriptor has data ready to read, we probably should not rely on it.
4ec855
Better be safe than sorry and call curl_multi_check_completion() in
4ec855
curl_multi_do(), too, just like it is done in curl_multi_read().
4ec855
4ec855
With this change, curl_multi_do() and curl_multi_read() are actually the
4ec855
same, so drop curl_multi_read() and use curl_multi_do() as the sole FD
4ec855
handler.
4ec855
4ec855
Signed-off-by: Max Reitz <mreitz@redhat.com>
4ec855
Message-id: 20190910124136.10565-4-mreitz@redhat.com
4ec855
Reviewed-by: Maxim Levitsky <mlevitsk@redhat.com>
4ec855
Reviewed-by: John Snow <jsnow@redhat.com>
4ec855
Signed-off-by: Max Reitz <mreitz@redhat.com>
4ec855
(cherry picked from commit 948403bcb1c7e71dcbe8ab8479cf3934a0efcbb5)
4ec855
Signed-off-by: Max Reitz <mreitz@redhat.com>
4ec855
Signed-off-by: Danilo C. L. de Paula <ddepaula@redhat.com>
4ec855
---
4ec855
 block/curl.c | 14 ++------------
4ec855
 1 file changed, 2 insertions(+), 12 deletions(-)
4ec855
4ec855
diff --git a/block/curl.c b/block/curl.c
4ec855
index b3fe09f..8f31594 100644
4ec855
--- a/block/curl.c
4ec855
+++ b/block/curl.c
4ec855
@@ -148,7 +148,6 @@ typedef struct BDRVCURLState {
4ec855
 
4ec855
 static void curl_clean_state(CURLState *s);
4ec855
 static void curl_multi_do(void *arg);
4ec855
-static void curl_multi_read(void *arg);
4ec855
 
4ec855
 #ifdef NEED_CURL_TIMER_CALLBACK
4ec855
 /* Called from curl_multi_do_locked, with s->mutex held.  */
4ec855
@@ -195,7 +194,7 @@ static int curl_sock_cb(CURL *curl, curl_socket_t fd, int action,
4ec855
     switch (action) {
4ec855
         case CURL_POLL_IN:
4ec855
             aio_set_fd_handler(s->aio_context, fd, false,
4ec855
-                               curl_multi_read, NULL, NULL, state);
4ec855
+                               curl_multi_do, NULL, NULL, state);
4ec855
             break;
4ec855
         case CURL_POLL_OUT:
4ec855
             aio_set_fd_handler(s->aio_context, fd, false,
4ec855
@@ -203,7 +202,7 @@ static int curl_sock_cb(CURL *curl, curl_socket_t fd, int action,
4ec855
             break;
4ec855
         case CURL_POLL_INOUT:
4ec855
             aio_set_fd_handler(s->aio_context, fd, false,
4ec855
-                               curl_multi_read, curl_multi_do, NULL, state);
4ec855
+                               curl_multi_do, curl_multi_do, NULL, state);
4ec855
             break;
4ec855
         case CURL_POLL_REMOVE:
4ec855
             aio_set_fd_handler(s->aio_context, fd, false,
4ec855
@@ -427,15 +426,6 @@ static void curl_multi_do(void *arg)
4ec855
 
4ec855
     qemu_mutex_lock(&s->s->mutex);
4ec855
     curl_multi_do_locked(s);
4ec855
-    qemu_mutex_unlock(&s->s->mutex);
4ec855
-}
4ec855
-
4ec855
-static void curl_multi_read(void *arg)
4ec855
-{
4ec855
-    CURLState *s = (CURLState *)arg;
4ec855
-
4ec855
-    qemu_mutex_lock(&s->s->mutex);
4ec855
-    curl_multi_do_locked(s);
4ec855
     curl_multi_check_completion(s->s);
4ec855
     qemu_mutex_unlock(&s->s->mutex);
4ec855
 }
4ec855
-- 
4ec855
1.8.3.1
4ec855