From: Fam Zheng <famz@redhat.com>
To: qemu-devel@nongnu.org
Cc: kwolf@redhat.com, jcody@redhat.com, Fam Zheng <famz@redhat.com>,
rjones@redhat.com, stefanha@redhat.com
Subject: [Qemu-devel] [PATCH v6 03/12] curl: change curl_multi_do to curl_fd_handler
Date: Fri, 24 May 2013 13:36:58 +0800 [thread overview]
Message-ID: <1369373827-9152-4-git-send-email-famz@redhat.com> (raw)
In-Reply-To: <1369373827-9152-1-git-send-email-famz@redhat.com>
The driver calls curl_multi_do to take action at several points, while
it's also registered as socket fd handler. This patch removes internal
call of curl_multi_do because they are not necessary when handler can be
called by socket data update.
Since curl_multi_do becomes a pure fd handler, the function is renamed.
It takes a pointer to CURLSockInfo now, instead of pointer to
BDRVCURLState.
Signed-off-by: Fam Zheng <famz@redhat.com>
---
block/curl.c | 28 +++++++++++++++++-----------
1 file changed, 17 insertions(+), 11 deletions(-)
diff --git a/block/curl.c b/block/curl.c
index a11002b..82a7a30 100644
--- a/block/curl.c
+++ b/block/curl.c
@@ -92,7 +92,7 @@ typedef struct BDRVCURLState {
} BDRVCURLState;
static void curl_clean_state(CURLState *s);
-static void curl_multi_do(void *arg);
+static void curl_fd_handler(void *arg);
static int curl_aio_flush(void *opaque);
static int curl_sock_cb(CURL *curl, curl_socket_t fd, int action,
@@ -110,17 +110,23 @@ static int curl_sock_cb(CURL *curl, curl_socket_t fd, int action,
}
switch (action) {
case CURL_POLL_IN:
- qemu_aio_set_fd_handler(fd, curl_multi_do, NULL, curl_aio_flush, s);
+ qemu_aio_set_fd_handler(fd, curl_fd_handler, NULL,
+ curl_aio_flush, sock);
+ sock->action |= CURL_CSELECT_IN;
break;
case CURL_POLL_OUT:
- qemu_aio_set_fd_handler(fd, NULL, curl_multi_do, curl_aio_flush, s);
+ qemu_aio_set_fd_handler(fd, NULL, curl_fd_handler, curl_aio_flush,
+ sock);
+ sock->action |= CURL_CSELECT_OUT;
break;
case CURL_POLL_INOUT:
- qemu_aio_set_fd_handler(fd, curl_multi_do, curl_multi_do,
- curl_aio_flush, s);
+ qemu_aio_set_fd_handler(fd, curl_fd_handler, curl_fd_handler,
+ curl_aio_flush, sock);
+ sock->action |= CURL_CSELECT_IN | CURL_CSELECT_OUT;
break;
case CURL_POLL_REMOVE:
qemu_aio_set_fd_handler(fd, NULL, NULL, NULL, NULL);
+ sock->action = 0;
break;
}
@@ -226,9 +232,10 @@ static int curl_find_buf(BDRVCURLState *s, size_t start, size_t len,
return FIND_RET_NONE;
}
-static void curl_multi_do(void *arg)
+static void curl_fd_handler(void *arg)
{
- BDRVCURLState *s = (BDRVCURLState *)arg;
+ CURLSockInfo *sock = (CURLSockInfo *)arg;
+ BDRVCURLState *s = sock->s;
int running;
int r;
int msgs_in_queue;
@@ -237,7 +244,9 @@ static void curl_multi_do(void *arg)
return;
do {
- r = curl_multi_socket_all(s->multi, &running);
+ r = curl_multi_socket_action(s->multi,
+ sock->fd, sock->action,
+ &running);
} while(r == CURLM_CALL_MULTI_PERFORM);
/* Try to find done transfers, so we can free the easy
@@ -302,7 +311,6 @@ static CURLState *curl_init_state(BDRVCURLState *s)
}
if (!state) {
g_usleep(100);
- curl_multi_do(s);
}
} while(!state);
@@ -483,7 +491,6 @@ static int curl_open(BlockDriverState *bs, QDict *options, int flags)
s->multi = curl_multi_init();
curl_multi_setopt(s->multi, CURLMOPT_SOCKETDATA, s);
curl_multi_setopt(s->multi, CURLMOPT_SOCKETFUNCTION, curl_sock_cb);
- curl_multi_do(s);
qemu_opts_del(opts);
return 0;
@@ -575,7 +582,6 @@ static void curl_readv_bh_cb(void *p)
curl_easy_setopt(state->curl, CURLOPT_RANGE, state->range);
curl_multi_add_handle(s->multi, state->curl);
- curl_multi_do(s);
}
--
1.8.2.3
next prev parent reply other threads:[~2013-05-24 5:37 UTC|newest]
Thread overview: 29+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-05-24 5:36 [Qemu-devel] [PATCH v6 00/12] curl: fix curl read Fam Zheng
2013-05-24 5:36 ` [Qemu-devel] [PATCH v6 01/12] curl: introduce CURLSockInfo to BDRVCURLState Fam Zheng
2013-05-24 5:36 ` [Qemu-devel] [PATCH v6 02/12] curl: change magic number to sizeof Fam Zheng
2013-05-24 5:36 ` Fam Zheng [this message]
2013-05-24 5:36 ` [Qemu-devel] [PATCH v6 04/12] curl: fix curl_open Fam Zheng
2013-05-24 5:37 ` [Qemu-devel] [PATCH v6 05/12] curl: add timer to BDRVCURLState Fam Zheng
2013-05-24 5:37 ` [Qemu-devel] [PATCH v6 06/12] curl: introduce CURLDataCache Fam Zheng
2013-05-24 5:37 ` [Qemu-devel] [PATCH v6 07/12] curl: make use of CURLDataCache Fam Zheng
2013-05-24 5:37 ` [Qemu-devel] [PATCH v6 08/12] curl: use list to store CURLState Fam Zheng
2013-05-24 5:37 ` [Qemu-devel] [PATCH v6 09/12] curl: add cache quota Fam Zheng
2013-05-24 5:37 ` [Qemu-devel] [PATCH v6 10/12] curl: introduce ssl_no_cert runtime option Fam Zheng
2013-05-24 5:37 ` [Qemu-devel] [PATCH v6 11/12] block/curl.c: Refuse to open the handle for writes Fam Zheng
2013-05-24 5:37 ` [Qemu-devel] [PATCH v6 12/12] curl: set s->url to NULL after free Fam Zheng
2013-05-24 8:07 ` [Qemu-devel] [PATCH v6 00/12] curl: fix curl read Richard W.M. Jones
2013-05-27 2:25 ` Fam Zheng
2013-05-27 11:57 ` Richard W.M. Jones
2013-05-28 7:30 ` Fam Zheng
2013-05-28 7:47 ` Richard W.M. Jones
2013-05-28 8:46 ` Richard W.M. Jones
2013-05-28 8:52 ` Fam Zheng
2013-05-28 8:53 ` Richard W.M. Jones
2013-05-28 10:35 ` Richard W.M. Jones
2013-05-28 11:01 ` Richard W.M. Jones
2013-05-28 11:14 ` Fam Zheng
2013-05-28 11:25 ` Richard W.M. Jones
2013-05-28 11:32 ` Richard W.M. Jones
2013-05-29 1:07 ` Fam Zheng
2013-05-29 9:25 ` Richard W.M. Jones
2013-05-28 11:34 ` Stefan Hajnoczi
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1369373827-9152-4-git-send-email-famz@redhat.com \
--to=famz@redhat.com \
--cc=jcody@redhat.com \
--cc=kwolf@redhat.com \
--cc=qemu-devel@nongnu.org \
--cc=rjones@redhat.com \
--cc=stefanha@redhat.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).