On Thu, May 23, 2013 at 11:38:03AM +0800, Fam Zheng wrote: > diff --git a/block/curl.c b/block/curl.c > index fc464ad..4fd5bb9 100644 > --- a/block/curl.c > +++ b/block/curl.c > @@ -89,6 +89,7 @@ typedef struct BDRVCURLState { > QLIST_HEAD(, CURLSockInfo) socks; > char *url; > size_t readahead_size; > + QEMUTimer *timer; > /* Whether http server accept range in header */ > bool accept_range; > } BDRVCURLState; > @@ -148,6 +149,38 @@ static size_t curl_header_cb(void *ptr, size_t size, > size_t nmemb, void *opaque) > return realsize; > } > > +static void curl_timer_cb(void *opaque) > +{ > + int running; > + BDRVCURLState *bs = (BDRVCURLState *)opaque;
Please call it 's'. 'bs' is for BlockDriverState*. Also, there is no need to cast void* to BDRVCURLState*, the conversion is implicit. > + DPRINTF("curl timeout!\n"); > + curl_multi_socket_action(bs->multi, CURL_SOCKET_TIMEOUT, 0, &running); > +} > + > +/* Call back for curl_multi interface */ > +static int curl_multi_timer_cb(CURLM *multi, long timeout_ms, void *s) > +{ > + BDRVCURLState *bs = (BDRVCURLState *)s; Same here.