((x) && (((struct SessionHandle *)(x))->magic == CURLEASY_MAGIC_NUMBER))
static void singlesocket(struct Curl_multi *multi,
- struct SessionHandle *easy);
+ struct SessionHandle *data);
static int update_timer(struct Curl_multi *multi);
static bool isHandleAtHead(struct SessionHandle *handle,
static void multi_freetimeout(void *a, void *b);
/* always use this function to change state, to make debugging easier */
-static void mstate(struct SessionHandle *easy, CURLMstate state
+static void mstate(struct SessionHandle *data, CURLMstate state
#ifdef DEBUGBUILD
, int lineno
#endif
#ifdef DEBUGBUILD
long connection_id = -5000;
#endif
- CURLMstate oldstate = easy->mstate;
+ CURLMstate oldstate = data->mstate;
if(oldstate == state)
/* don't bother when the new state is the same as the old state */
return;
- easy->mstate = state;
+ data->mstate = state;
#ifdef DEBUGBUILD
- if(easy->mstate >= CURLM_STATE_CONNECT_PEND &&
- easy->mstate < CURLM_STATE_COMPLETED) {
- if(easy->easy_conn)
- connection_id = easy->easy_conn->connection_id;
+ if(data->mstate >= CURLM_STATE_CONNECT_PEND &&
+ data->mstate < CURLM_STATE_COMPLETED) {
+ if(data->easy_conn)
+ connection_id = data->easy_conn->connection_id;
- infof(easy,
+ infof(data,
"STATE: %s => %s handle %p; line %d (connection #%ld) \n",
- statename[oldstate], statename[easy->mstate],
- (void *)easy, lineno, connection_id);
+ statename[oldstate], statename[data->mstate],
+ (void *)data, lineno, connection_id);
}
#endif
if(state == CURLM_STATE_COMPLETED)
/* changing to COMPLETED means there's one less easy handle 'alive' */
- easy->multi->num_alive--;
+ data->multi->num_alive--;
}
#ifndef DEBUGBUILD
struct Curl_sh_entry *sh = (struct Curl_sh_entry *)p;
fprintf(stderr, " [easy %p/magic %x/socket %d]",
- (void *)sh->easy, sh->easy->magic, (int)sh->socket);
+ (void *)sh->data, sh->data->magic, (int)sh->socket);
}
#endif
return CURLM_BAD_EASY_HANDLE;
if(easy) {
- bool premature = (easy->mstate < CURLM_STATE_COMPLETED) ? TRUE : FALSE;
- bool easy_owns_conn = (easy->easy_conn &&
- (easy->easy_conn->data == easy)) ?
+ bool premature = (data->mstate < CURLM_STATE_COMPLETED) ? TRUE : FALSE;
+ bool easy_owns_conn = (data->easy_conn &&
+ (data->easy_conn->data == easy)) ?
TRUE : FALSE;
/* If the 'state' is not INIT or COMPLETED, we might need to do something
alive connections when this is removed */
multi->num_alive--;
- if(easy->easy_conn &&
- (easy->easy_conn->send_pipe->size +
- easy->easy_conn->recv_pipe->size > 1) &&
- easy->mstate > CURLM_STATE_WAITDO &&
- easy->mstate < CURLM_STATE_COMPLETED) {
+ if(data->easy_conn &&
+ (data->easy_conn->send_pipe->size +
+ data->easy_conn->recv_pipe->size > 1) &&
+ data->mstate > CURLM_STATE_WAITDO &&
+ data->mstate < CURLM_STATE_COMPLETED) {
/* If the handle is in a pipeline and has started sending off its
request but not received its response yet, we need to close
connection. */
- easy->easy_conn->bits.close = TRUE;
+ data->easy_conn->bits.close = TRUE;
/* Set connection owner so that Curl_done() closes it.
We can sefely do this here since connection is killed. */
- easy->easy_conn->data = easy;
+ data->easy_conn->data = easy;
}
- /* The timer must be shut down before easy->multi is set to NULL,
+ /* The timer must be shut down before data->multi is set to NULL,
else the timenode will remain in the splay tree after
curl_easy_cleanup is called. */
- Curl_expire(easy, 0);
+ Curl_expire(data, 0);
/* destroy the timeout list that is held in the easy handle */
if(data->state.timeoutlist) {
data->state.timeoutlist = NULL;
}
- if(easy->dns.hostcachetype == HCACHE_MULTI) {
+ if(data->dns.hostcachetype == HCACHE_MULTI) {
/* stop using the multi handle's DNS cache */
- easy->dns.hostcache = NULL;
- easy->dns.hostcachetype = HCACHE_NONE;
+ data->dns.hostcache = NULL;
+ data->dns.hostcachetype = HCACHE_NONE;
}
- if(easy->easy_conn) {
+ if(data->easy_conn) {
/* we must call Curl_done() here (if we still "own it") so that we don't
leave a half-baked one around */
Note that this ignores the return code simply because there's
nothing really useful to do with it anyway! */
- (void)Curl_done(&easy->easy_conn, easy->result, premature);
+ (void)Curl_done(&data->easy_conn, data->result, premature);
}
else
/* Clear connection pipelines, if Curl_done above was not called */
- Curl_getoff_all_pipelines(easy, easy->easy_conn);
+ Curl_getoff_all_pipelines(data, data->easy_conn);
}
/* as this was using a shared connection cache we clear the pointer
to that since we're not part of that multi handle anymore */
- easy->state.conn_cache = NULL;
+ data->state.conn_cache = NULL;
/* change state without using multistate(), only to make singlesocket() do
what we want */
- easy->mstate = CURLM_STATE_COMPLETED;
+ data->mstate = CURLM_STATE_COMPLETED;
singlesocket(multi, easy); /* to let the application know what sockets
that vanish with this handle */
/* Remove the association between the connection and the handle */
- if(easy->easy_conn) {
- easy->easy_conn->data = NULL;
- easy->easy_conn = NULL;
+ if(data->easy_conn) {
+ data->easy_conn->data = NULL;
+ data->easy_conn = NULL;
}
- easy_addmulti(easy, NULL); /* clear the association to this multi
+ easy_addmulti(data, NULL); /* clear the association to this multi
handle */
{
}
/* make the previous node point to our next */
- if(easy->prev)
- easy->prev->next = easy->next;
+ if(data->prev)
+ data->prev->next = data->next;
else
- multi->easyp = easy->next; /* point to first node */
+ multi->easyp = data->next; /* point to first node */
/* make our next point to our previous node */
- if(easy->next)
- easy->next->prev = easy->prev;
+ if(data->next)
+ data->next->prev = data->prev;
else
- multi->easylp = easy->prev; /* point to last node */
+ multi->easylp = data->prev; /* point to last node */
/* NOTE NOTE NOTE
We do not touch the easy handle here! */
}
/* returns bitmapped flags for this handle and its sockets */
-static int multi_getsock(struct SessionHandle *easy,
+static int multi_getsock(struct SessionHandle *data,
curl_socket_t *socks, /* points to numsocks number
of sockets */
int numsocks)
happen when this is called from curl_multi_remove_handle() =>
singlesocket() => multi_getsock().
*/
- if(easy->state.pipe_broke || !easy->easy_conn)
+ if(data->state.pipe_broke || !data->easy_conn)
return 0;
- if(easy->mstate > CURLM_STATE_CONNECT &&
- easy->mstate < CURLM_STATE_COMPLETED) {
+ if(data->mstate > CURLM_STATE_CONNECT &&
+ data->mstate < CURLM_STATE_COMPLETED) {
/* Set up ownership correctly */
- easy->easy_conn->data = easy;
+ data->easy_conn->data = data;
}
- switch(easy->mstate) {
+ switch(data->mstate) {
default:
#if 0 /* switch back on these cases to get the compiler to check for all enums
to be present */
return 0;
case CURLM_STATE_WAITRESOLVE:
- return Curl_resolver_getsock(easy->easy_conn, socks, numsocks);
+ return Curl_resolver_getsock(data->easy_conn, socks, numsocks);
case CURLM_STATE_PROTOCONNECT:
- return Curl_protocol_getsock(easy->easy_conn, socks, numsocks);
+ return Curl_protocol_getsock(data->easy_conn, socks, numsocks);
case CURLM_STATE_DO:
case CURLM_STATE_DOING:
- return Curl_doing_getsock(easy->easy_conn, socks, numsocks);
+ return Curl_doing_getsock(data->easy_conn, socks, numsocks);
case CURLM_STATE_WAITPROXYCONNECT:
case CURLM_STATE_WAITCONNECT:
- return waitconnect_getsock(easy->easy_conn, socks, numsocks);
+ return waitconnect_getsock(data->easy_conn, socks, numsocks);
case CURLM_STATE_DO_MORE:
- return domore_getsock(easy->easy_conn, socks, numsocks);
+ return domore_getsock(data->easy_conn, socks, numsocks);
case CURLM_STATE_DO_DONE: /* since is set after DO is completed, we switch
to waiting for the same as the *PERFORM
states */
case CURLM_STATE_PERFORM:
case CURLM_STATE_WAITPERFORM:
- return Curl_single_getsock(easy->easy_conn, socks, numsocks);
+ return Curl_single_getsock(data->easy_conn, socks, numsocks);
}
}
Some easy handles may not have connected to the remote host yet,
and then we must make sure that is done. */
struct Curl_multi *multi=(struct Curl_multi *)multi_handle;
- struct SessionHandle *easy;
+ struct SessionHandle *data;
int this_max_fd=-1;
curl_socket_t sockbunch[MAX_SOCKSPEREASYHANDLE];
int bitmap;
if(!GOOD_MULTI_HANDLE(multi))
return CURLM_BAD_HANDLE;
- easy=multi->easyp;
- while(easy) {
- bitmap = multi_getsock(easy, sockbunch, MAX_SOCKSPEREASYHANDLE);
+ data=multi->easyp;
+ while(data) {
+ bitmap = multi_getsock(data, sockbunch, MAX_SOCKSPEREASYHANDLE);
for(i=0; i< MAX_SOCKSPEREASYHANDLE; i++) {
curl_socket_t s = CURL_SOCKET_BAD;
}
}
- easy = easy->next; /* check next handle */
+ data = data->next; /* check next handle */
}
*max_fd = this_max_fd;
int *ret)
{
struct Curl_multi *multi=(struct Curl_multi *)multi_handle;
- struct SessionHandle *easy;
+ struct SessionHandle *data;
curl_socket_t sockbunch[MAX_SOCKSPEREASYHANDLE];
int bitmap;
unsigned int i;
timeout_ms = (int)timeout_internal;
/* Count up how many fds we have from the multi handle */
- easy=multi->easyp;
- while(easy) {
- bitmap = multi_getsock(easy, sockbunch, MAX_SOCKSPEREASYHANDLE);
+ data=multi->easyp;
+ while(data) {
+ bitmap = multi_getsock(data, sockbunch, MAX_SOCKSPEREASYHANDLE);
for(i=0; i< MAX_SOCKSPEREASYHANDLE; i++) {
curl_socket_t s = CURL_SOCKET_BAD;
}
}
- easy = easy->next; /* check next handle */
+ data = data->next; /* check next handle */
}
curlfds = nfds; /* number of internal file descriptors */
if(curlfds) {
/* Add the curl handles to our pollfds first */
- easy=multi->easyp;
- while(easy) {
- bitmap = multi_getsock(easy, sockbunch, MAX_SOCKSPEREASYHANDLE);
+ data=multi->easyp;
+ while(data) {
+ bitmap = multi_getsock(data, sockbunch, MAX_SOCKSPEREASYHANDLE);
for(i=0; i< MAX_SOCKSPEREASYHANDLE; i++) {
curl_socket_t s = CURL_SOCKET_BAD;
}
}
- easy = easy->next; /* check next handle */
+ data = data->next; /* check next handle */
}
}
static CURLMcode multi_runsingle(struct Curl_multi *multi,
struct timeval now,
- struct SessionHandle *easy)
+ struct SessionHandle *data)
{
struct Curl_message *msg = NULL;
bool connected;
bool done = FALSE;
CURLMcode result = CURLM_OK;
struct SingleRequest *k;
- struct SessionHandle *data;
long timeout_ms;
int control;
- if(!GOOD_EASY_HANDLE(easy))
+ if(!GOOD_EASY_HANDLE(data))
return CURLM_BAD_EASY_HANDLE;
- data = easy;
-
do {
/* this is a single-iteration do-while loop just to allow a
break to skip to the end of it */
we're using gets cleaned up and we're left with nothing. */
if(data->state.pipe_broke) {
infof(data, "Pipe broke: handle 0x%p, url = %s\n",
- (void *)easy, data->state.path);
+ (void *)data, data->state.path);
- if(easy->mstate < CURLM_STATE_COMPLETED) {
+ if(data->mstate < CURLM_STATE_COMPLETED) {
/* Head back to the CONNECT state */
- multistate(easy, CURLM_STATE_CONNECT);
+ multistate(data, CURLM_STATE_CONNECT);
result = CURLM_CALL_MULTI_PERFORM;
- easy->result = CURLE_OK;
+ data->result = CURLE_OK;
}
data->state.pipe_broke = FALSE;
- easy->easy_conn = NULL;
+ data->easy_conn = NULL;
break;
}
- if(!easy->easy_conn &&
- easy->mstate > CURLM_STATE_CONNECT &&
- easy->mstate < CURLM_STATE_DONE) {
- /* In all these states, the code will blindly access 'easy->easy_conn'
+ if(!data->easy_conn &&
+ data->mstate > CURLM_STATE_CONNECT &&
+ data->mstate < CURLM_STATE_DONE) {
+ /* In all these states, the code will blindly access 'data->easy_conn'
so this is precaution that it isn't NULL. And it silences static
analyzers. */
- failf(data, "In state %d with no easy_conn, bail out!\n", easy->mstate);
+ failf(data, "In state %d with no easy_conn, bail out!\n", data->mstate);
return CURLM_INTERNAL_ERROR;
}
- if(easy->easy_conn && easy->mstate > CURLM_STATE_CONNECT &&
- easy->mstate < CURLM_STATE_COMPLETED)
+ if(data->easy_conn && data->mstate > CURLM_STATE_CONNECT &&
+ data->mstate < CURLM_STATE_COMPLETED)
/* Make sure we set the connection's current owner */
- easy->easy_conn->data = data;
+ data->easy_conn->data = data;
- if(easy->easy_conn &&
- (easy->mstate >= CURLM_STATE_CONNECT) &&
- (easy->mstate < CURLM_STATE_COMPLETED)) {
+ if(data->easy_conn &&
+ (data->mstate >= CURLM_STATE_CONNECT) &&
+ (data->mstate < CURLM_STATE_COMPLETED)) {
/* we need to wait for the connect state as only then is the start time
stored, but we must not check already completed handles */
timeout_ms = Curl_timeleft(data, &now,
- (easy->mstate <= CURLM_STATE_WAITDO)?
+ (data->mstate <= CURLM_STATE_WAITDO)?
TRUE:FALSE);
if(timeout_ms < 0) {
/* Handle timed out */
- if(easy->mstate == CURLM_STATE_WAITRESOLVE)
+ if(data->mstate == CURLM_STATE_WAITRESOLVE)
failf(data, "Resolving timed out after %ld milliseconds",
Curl_tvdiff(now, data->progress.t_startsingle));
- else if(easy->mstate == CURLM_STATE_WAITCONNECT)
+ else if(data->mstate == CURLM_STATE_WAITCONNECT)
failf(data, "Connection timed out after %ld milliseconds",
Curl_tvdiff(now, data->progress.t_startsingle));
else {
/* Force the connection closed because the server could continue to
send us stuff at any time. (The disconnect_conn logic used below
doesn't work at this point). */
- easy->easy_conn->bits.close = TRUE;
- easy->result = CURLE_OPERATION_TIMEDOUT;
- multistate(easy, CURLM_STATE_COMPLETED);
+ data->easy_conn->bits.close = TRUE;
+ data->result = CURLE_OPERATION_TIMEDOUT;
+ multistate(data, CURLM_STATE_COMPLETED);
break;
}
}
- switch(easy->mstate) {
+ switch(data->mstate) {
case CURLM_STATE_INIT:
/* init this transfer. */
- easy->result=Curl_pretransfer(data);
+ data->result=Curl_pretransfer(data);
- if(CURLE_OK == easy->result) {
+ if(CURLE_OK == data->result) {
/* after init, go CONNECT */
- multistate(easy, CURLM_STATE_CONNECT);
+ multistate(data, CURLM_STATE_CONNECT);
result = CURLM_CALL_MULTI_PERFORM;
}
break;
case CURLM_STATE_CONNECT:
/* Connect. We want to get a connection identifier filled in. */
Curl_pgrsTime(data, TIMER_STARTSINGLE);
- easy->result = Curl_connect(data, &easy->easy_conn,
+ data->result = Curl_connect(data, &data->easy_conn,
&async, &protocol_connect);
- if(CURLE_NO_CONNECTION_AVAILABLE == easy->result) {
+ if(CURLE_NO_CONNECTION_AVAILABLE == data->result) {
/* There was no connection available. We will go to the pending
state and wait for an available connection. */
- multistate(easy, CURLM_STATE_CONNECT_PEND);
- easy->result = CURLE_OK;
+ multistate(data, CURLM_STATE_CONNECT_PEND);
+ data->result = CURLE_OK;
break;
}
- if(CURLE_OK == easy->result) {
+ if(CURLE_OK == data->result) {
/* Add this handle to the send or pend pipeline */
- easy->result = Curl_add_handle_to_pipeline(data, easy->easy_conn);
- if(CURLE_OK != easy->result)
+ data->result = Curl_add_handle_to_pipeline(data, data->easy_conn);
+ if(CURLE_OK != data->result)
disconnect_conn = TRUE;
else {
if(async)
/* We're now waiting for an asynchronous name lookup */
- multistate(easy, CURLM_STATE_WAITRESOLVE);
+ multistate(data, CURLM_STATE_WAITRESOLVE);
else {
/* after the connect has been sent off, go WAITCONNECT unless the
protocol connect is already done and we can go directly to
result = CURLM_CALL_MULTI_PERFORM;
if(protocol_connect)
- multistate(easy, multi->pipelining_enabled?
+ multistate(data, multi->pipelining_enabled?
CURLM_STATE_WAITDO:CURLM_STATE_DO);
else {
#ifndef CURL_DISABLE_HTTP
- if(easy->easy_conn->tunnel_state[FIRSTSOCKET] == TUNNEL_CONNECT)
- multistate(easy, CURLM_STATE_WAITPROXYCONNECT);
+ if(data->easy_conn->tunnel_state[FIRSTSOCKET] == TUNNEL_CONNECT)
+ multistate(data, CURLM_STATE_WAITPROXYCONNECT);
else
#endif
- multistate(easy, CURLM_STATE_WAITCONNECT);
+ multistate(data, CURLM_STATE_WAITCONNECT);
}
}
}
struct Curl_dns_entry *dns = NULL;
/* check if we have the name resolved by now */
- easy->result = Curl_resolver_is_resolved(easy->easy_conn, &dns);
+ data->result = Curl_resolver_is_resolved(data->easy_conn, &dns);
/* Update sockets here, because the socket(s) may have been
closed and the application thus needs to be told, even if it
down. If the name has not yet been resolved, it is likely
that new sockets have been opened in an attempt to contact
another resolver. */
- singlesocket(multi, easy);
+ singlesocket(multi, data);
if(dns) {
/* Perform the next step in the connection phase, and then move on
to the WAITCONNECT state */
- easy->result = Curl_async_resolved(easy->easy_conn,
+ data->result = Curl_async_resolved(data->easy_conn,
&protocol_connect);
- if(CURLE_OK != easy->result)
+ if(CURLE_OK != data->result)
/* if Curl_async_resolved() returns failure, the connection struct
is already freed and gone */
- easy->easy_conn = NULL; /* no more connection */
+ data->easy_conn = NULL; /* no more connection */
else {
/* call again please so that we get the next socket setup */
result = CURLM_CALL_MULTI_PERFORM;
if(protocol_connect)
- multistate(easy, multi->pipelining_enabled?
+ multistate(data, multi->pipelining_enabled?
CURLM_STATE_WAITDO:CURLM_STATE_DO);
else {
#ifndef CURL_DISABLE_HTTP
- if(easy->easy_conn->tunnel_state[FIRSTSOCKET] == TUNNEL_CONNECT)
- multistate(easy, CURLM_STATE_WAITPROXYCONNECT);
+ if(data->easy_conn->tunnel_state[FIRSTSOCKET] == TUNNEL_CONNECT)
+ multistate(data, CURLM_STATE_WAITPROXYCONNECT);
else
#endif
- multistate(easy, CURLM_STATE_WAITCONNECT);
+ multistate(data, CURLM_STATE_WAITCONNECT);
}
}
}
- if(CURLE_OK != easy->result) {
+ if(CURLE_OK != data->result) {
/* failure detected */
disconnect_conn = TRUE;
break;
#ifndef CURL_DISABLE_HTTP
case CURLM_STATE_WAITPROXYCONNECT:
/* this is HTTP-specific, but sending CONNECT to a proxy is HTTP... */
- easy->result = Curl_http_connect(easy->easy_conn, &protocol_connect);
+ data->result = Curl_http_connect(data->easy_conn, &protocol_connect);
- if(easy->easy_conn->bits.proxy_connect_closed) {
+ if(data->easy_conn->bits.proxy_connect_closed) {
/* reset the error buffer */
if(data->set.errorbuffer)
data->set.errorbuffer[0] = '\0';
data->state.errorbuf = FALSE;
- easy->result = CURLE_OK;
+ data->result = CURLE_OK;
result = CURLM_CALL_MULTI_PERFORM;
- multistate(easy, CURLM_STATE_CONNECT);
+ multistate(data, CURLM_STATE_CONNECT);
}
- else if(CURLE_OK == easy->result) {
- if(easy->easy_conn->tunnel_state[FIRSTSOCKET] == TUNNEL_COMPLETE)
- multistate(easy, CURLM_STATE_WAITCONNECT);
+ else if(CURLE_OK == data->result) {
+ if(data->easy_conn->tunnel_state[FIRSTSOCKET] == TUNNEL_COMPLETE)
+ multistate(data, CURLM_STATE_WAITCONNECT);
}
break;
#endif
case CURLM_STATE_WAITCONNECT:
/* awaiting a completion of an asynch connect */
- easy->result = Curl_is_connected(easy->easy_conn,
+ data->result = Curl_is_connected(data->easy_conn,
FIRSTSOCKET,
&connected);
if(connected) {
- if(!easy->result)
+ if(!data->result)
/* if everything is still fine we do the protocol-specific connect
setup */
- easy->result = Curl_protocol_connect(easy->easy_conn,
+ data->result = Curl_protocol_connect(data->easy_conn,
&protocol_connect);
}
- if(CURLE_OK != easy->result) {
+ if(CURLE_OK != data->result) {
/* failure detected */
/* Just break, the cleaning up is handled all in one place */
disconnect_conn = TRUE;
BUT if we are using a proxy we must change to WAITPROXYCONNECT
*/
#ifndef CURL_DISABLE_HTTP
- if(easy->easy_conn->tunnel_state[FIRSTSOCKET] == TUNNEL_CONNECT)
- multistate(easy, CURLM_STATE_WAITPROXYCONNECT);
+ if(data->easy_conn->tunnel_state[FIRSTSOCKET] == TUNNEL_CONNECT)
+ multistate(data, CURLM_STATE_WAITPROXYCONNECT);
else
#endif
- multistate(easy, CURLM_STATE_PROTOCONNECT);
+ multistate(data, CURLM_STATE_PROTOCONNECT);
}
else
/* after the connect has completed, go WAITDO or DO */
- multistate(easy, multi->pipelining_enabled?
+ multistate(data, multi->pipelining_enabled?
CURLM_STATE_WAITDO:CURLM_STATE_DO);
result = CURLM_CALL_MULTI_PERFORM;
case CURLM_STATE_PROTOCONNECT:
/* protocol-specific connect phase */
- easy->result = Curl_protocol_connecting(easy->easy_conn,
+ data->result = Curl_protocol_connecting(data->easy_conn,
&protocol_connect);
- if((easy->result == CURLE_OK) && protocol_connect) {
+ if((data->result == CURLE_OK) && protocol_connect) {
/* after the connect has completed, go WAITDO or DO */
- multistate(easy, multi->pipelining_enabled?
+ multistate(data, multi->pipelining_enabled?
CURLM_STATE_WAITDO:CURLM_STATE_DO);
result = CURLM_CALL_MULTI_PERFORM;
}
- else if(easy->result) {
+ else if(data->result) {
/* failure detected */
Curl_posttransfer(data);
- Curl_done(&easy->easy_conn, easy->result, TRUE);
+ Curl_done(&data->easy_conn, data->result, TRUE);
disconnect_conn = TRUE;
}
break;
/* Wait for our turn to DO when we're pipelining requests */
#ifdef DEBUGBUILD
infof(data, "WAITDO: Conn %ld send pipe %zu inuse %s athead %s\n",
- easy->easy_conn->connection_id,
- easy->easy_conn->send_pipe->size,
- easy->easy_conn->writechannel_inuse?"TRUE":"FALSE",
+ data->easy_conn->connection_id,
+ data->easy_conn->send_pipe->size,
+ data->easy_conn->writechannel_inuse?"TRUE":"FALSE",
isHandleAtHead(data,
- easy->easy_conn->send_pipe)?"TRUE":"FALSE");
+ data->easy_conn->send_pipe)?"TRUE":"FALSE");
#endif
- if(!easy->easy_conn->writechannel_inuse &&
+ if(!data->easy_conn->writechannel_inuse &&
isHandleAtHead(data,
- easy->easy_conn->send_pipe)) {
+ data->easy_conn->send_pipe)) {
/* Grab the channel */
- easy->easy_conn->writechannel_inuse = TRUE;
- multistate(easy, CURLM_STATE_DO);
+ data->easy_conn->writechannel_inuse = TRUE;
+ multistate(data, CURLM_STATE_DO);
result = CURLM_CALL_MULTI_PERFORM;
}
break;
case CURLM_STATE_DO:
if(data->set.connect_only) {
/* keep connection open for application to use the socket */
- easy->easy_conn->bits.close = FALSE;
- multistate(easy, CURLM_STATE_DONE);
- easy->result = CURLE_OK;
+ data->easy_conn->bits.close = FALSE;
+ multistate(data, CURLM_STATE_DONE);
+ data->result = CURLE_OK;
result = CURLM_CALL_MULTI_PERFORM;
}
else {
/* Perform the protocol's DO action */
- easy->result = Curl_do(&easy->easy_conn, &dophase_done);
+ data->result = Curl_do(&data->easy_conn, &dophase_done);
- /* When Curl_do() returns failure, easy->easy_conn might be NULL! */
+ /* When Curl_do() returns failure, data->easy_conn might be NULL! */
- if(CURLE_OK == easy->result) {
+ if(CURLE_OK == data->result) {
if(!dophase_done) {
/* some steps needed for wildcard matching */
if(data->set.wildcardmatch) {
struct WildcardData *wc = &data->wildcard;
if(wc->state == CURLWC_DONE || wc->state == CURLWC_SKIP) {
/* skip some states if it is important */
- Curl_done(&easy->easy_conn, CURLE_OK, FALSE);
- multistate(easy, CURLM_STATE_DONE);
+ Curl_done(&data->easy_conn, CURLE_OK, FALSE);
+ multistate(data, CURLM_STATE_DONE);
result = CURLM_CALL_MULTI_PERFORM;
break;
}
}
/* DO was not completed in one function call, we must continue
DOING... */
- multistate(easy, CURLM_STATE_DOING);
+ multistate(data, CURLM_STATE_DOING);
result = CURLM_OK;
}
/* after DO, go DO_DONE... or DO_MORE */
- else if(easy->easy_conn->bits.do_more) {
+ else if(data->easy_conn->bits.do_more) {
/* we're supposed to do more, but we need to sit down, relax
and wait a little while first */
- multistate(easy, CURLM_STATE_DO_MORE);
+ multistate(data, CURLM_STATE_DO_MORE);
result = CURLM_OK;
}
else {
/* we're done with the DO, now DO_DONE */
- multistate(easy, CURLM_STATE_DO_DONE);
+ multistate(data, CURLM_STATE_DO_DONE);
result = CURLM_CALL_MULTI_PERFORM;
}
}
- else if((CURLE_SEND_ERROR == easy->result) &&
- easy->easy_conn->bits.reuse) {
+ else if((CURLE_SEND_ERROR == data->result) &&
+ data->easy_conn->bits.reuse) {
/*
* In this situation, a connection that we were trying to use
* may have unexpectedly died. If possible, send the connection
CURLcode drc;
bool retry = FALSE;
- drc = Curl_retry_request(easy->easy_conn, &newurl);
+ drc = Curl_retry_request(data->easy_conn, &newurl);
if(drc) {
/* a failure here pretty much implies an out of memory */
- easy->result = drc;
+ data->result = drc;
disconnect_conn = TRUE;
}
else
retry = (newurl)?TRUE:FALSE;
Curl_posttransfer(data);
- drc = Curl_done(&easy->easy_conn, easy->result, FALSE);
+ drc = Curl_done(&data->easy_conn, data->result, FALSE);
/* When set to retry the connection, we must to go back to
* the CONNECT state */
follow = FOLLOW_RETRY;
drc = Curl_follow(data, newurl, follow);
if(drc == CURLE_OK) {
- multistate(easy, CURLM_STATE_CONNECT);
+ multistate(data, CURLM_STATE_CONNECT);
result = CURLM_CALL_MULTI_PERFORM;
- easy->result = CURLE_OK;
+ data->result = CURLE_OK;
}
else {
/* Follow failed */
- easy->result = drc;
+ data->result = drc;
free(newurl);
}
}
else {
/* done didn't return OK or SEND_ERROR */
- easy->result = drc;
+ data->result = drc;
free(newurl);
}
}
else {
/* failure detected */
Curl_posttransfer(data);
- if(easy->easy_conn)
- Curl_done(&easy->easy_conn, easy->result, FALSE);
+ if(data->easy_conn)
+ Curl_done(&data->easy_conn, data->result, FALSE);
disconnect_conn = TRUE;
}
}
case CURLM_STATE_DOING:
/* we continue DOING until the DO phase is complete */
- easy->result = Curl_protocol_doing(easy->easy_conn,
+ data->result = Curl_protocol_doing(data->easy_conn,
&dophase_done);
- if(CURLE_OK == easy->result) {
+ if(CURLE_OK == data->result) {
if(dophase_done) {
/* after DO, go DO_DONE or DO_MORE */
- multistate(easy, easy->easy_conn->bits.do_more?
+ multistate(data, data->easy_conn->bits.do_more?
CURLM_STATE_DO_MORE:
CURLM_STATE_DO_DONE);
result = CURLM_CALL_MULTI_PERFORM;
else {
/* failure detected */
Curl_posttransfer(data);
- Curl_done(&easy->easy_conn, easy->result, FALSE);
+ Curl_done(&data->easy_conn, data->result, FALSE);
disconnect_conn = TRUE;
}
break;
/*
* When we are connected, DO MORE and then go DO_DONE
*/
- easy->result = Curl_do_more(easy->easy_conn, &control);
+ data->result = Curl_do_more(data->easy_conn, &control);
/* No need to remove this handle from the send pipeline here since that
is done in Curl_done() */
- if(CURLE_OK == easy->result) {
+ if(CURLE_OK == data->result) {
if(control) {
/* if positive, advance to DO_DONE
if negative, go back to DOING */
- multistate(easy, control==1?
+ multistate(data, control==1?
CURLM_STATE_DO_DONE:
CURLM_STATE_DOING);
result = CURLM_CALL_MULTI_PERFORM;
else {
/* failure detected */
Curl_posttransfer(data);
- Curl_done(&easy->easy_conn, easy->result, FALSE);
+ Curl_done(&data->easy_conn, data->result, FALSE);
disconnect_conn = TRUE;
}
break;
case CURLM_STATE_DO_DONE:
/* Move ourselves from the send to recv pipeline */
- Curl_move_handle_from_send_to_recv_pipe(data, easy->easy_conn);
+ Curl_move_handle_from_send_to_recv_pipe(data, data->easy_conn);
/* Check if we can move pending requests to send pipe */
Curl_multi_process_pending_handles(multi);
- multistate(easy, CURLM_STATE_WAITPERFORM);
+ multistate(data, CURLM_STATE_WAITPERFORM);
result = CURLM_CALL_MULTI_PERFORM;
break;
case CURLM_STATE_WAITPERFORM:
/* Wait for our turn to PERFORM */
- if(!easy->easy_conn->readchannel_inuse &&
+ if(!data->easy_conn->readchannel_inuse &&
isHandleAtHead(data,
- easy->easy_conn->recv_pipe)) {
+ data->easy_conn->recv_pipe)) {
/* Grab the channel */
- easy->easy_conn->readchannel_inuse = TRUE;
- multistate(easy, CURLM_STATE_PERFORM);
+ data->easy_conn->readchannel_inuse = TRUE;
+ multistate(data, CURLM_STATE_PERFORM);
result = CURLM_CALL_MULTI_PERFORM;
}
#ifdef DEBUGBUILD
else {
infof(data, "WAITPERFORM: Conn %ld recv pipe %zu inuse %s athead %s\n",
- easy->easy_conn->connection_id,
- easy->easy_conn->recv_pipe->size,
- easy->easy_conn->readchannel_inuse?"TRUE":"FALSE",
+ data->easy_conn->connection_id,
+ data->easy_conn->recv_pipe->size,
+ data->easy_conn->readchannel_inuse?"TRUE":"FALSE",
isHandleAtHead(data,
- easy->easy_conn->recv_pipe)?"TRUE":"FALSE");
+ data->easy_conn->recv_pipe)?"TRUE":"FALSE");
}
#endif
break;
case CURLM_STATE_TOOFAST: /* limit-rate exceeded in either direction */
/* if both rates are within spec, resume transfer */
- if(Curl_pgrsUpdate(easy->easy_conn))
- easy->result = CURLE_ABORTED_BY_CALLBACK;
+ if(Curl_pgrsUpdate(data->easy_conn))
+ data->result = CURLE_ABORTED_BY_CALLBACK;
else
- easy->result = Curl_speedcheck(data, now);
+ data->result = Curl_speedcheck(data, now);
if(( (data->set.max_send_speed == 0) ||
(data->progress.ulspeed < data->set.max_send_speed )) &&
( (data->set.max_recv_speed == 0) ||
(data->progress.dlspeed < data->set.max_recv_speed)))
- multistate(easy, CURLM_STATE_PERFORM);
+ multistate(data, CURLM_STATE_PERFORM);
break;
case CURLM_STATE_PERFORM:
(data->progress.ulspeed > data->set.max_send_speed)) {
int buffersize;
- multistate(easy, CURLM_STATE_TOOFAST);
+ multistate(data, CURLM_STATE_TOOFAST);
/* calculate upload rate-limitation timeout. */
buffersize = (int)(data->set.buffer_size ?
(data->progress.dlspeed > data->set.max_recv_speed)) {
int buffersize;
- multistate(easy, CURLM_STATE_TOOFAST);
+ multistate(data, CURLM_STATE_TOOFAST);
/* Calculate download rate-limitation timeout. */
buffersize = (int)(data->set.buffer_size ?
}
/* read/write data if it is ready to do so */
- easy->result = Curl_readwrite(easy->easy_conn, &done);
+ data->result = Curl_readwrite(data->easy_conn, &done);
k = &data->req;
if(!(k->keepon & KEEP_RECV)) {
/* We're done receiving */
- easy->easy_conn->readchannel_inuse = FALSE;
+ data->easy_conn->readchannel_inuse = FALSE;
}
if(!(k->keepon & KEEP_SEND)) {
/* We're done sending */
- easy->easy_conn->writechannel_inuse = FALSE;
+ data->easy_conn->writechannel_inuse = FALSE;
}
- if(done || (easy->result == CURLE_RECV_ERROR)) {
+ if(done || (data->result == CURLE_RECV_ERROR)) {
/* If CURLE_RECV_ERROR happens early enough, we assume it was a race
* condition and the server closed the re-used connection exactly when
* we wanted to use it, so figure out if that is indeed the case.
*/
- CURLcode ret = Curl_retry_request(easy->easy_conn, &newurl);
+ CURLcode ret = Curl_retry_request(data->easy_conn, &newurl);
if(!ret)
retry = (newurl)?TRUE:FALSE;
if(retry) {
/* if we are to retry, set the result to OK and consider the
request as done */
- easy->result = CURLE_OK;
+ data->result = CURLE_OK;
done = TRUE;
}
}
- if(easy->result) {
+ if(data->result) {
/*
* The transfer phase returned error, we mark the connection to get
* closed to prevent being re-used. This is because we can't possibly
* happened in the data connection.
*/
- if(!(easy->easy_conn->handler->flags & PROTOPT_DUAL))
- easy->easy_conn->bits.close = TRUE;
+ if(!(data->easy_conn->handler->flags & PROTOPT_DUAL))
+ data->easy_conn->bits.close = TRUE;
Curl_posttransfer(data);
- Curl_done(&easy->easy_conn, easy->result, FALSE);
+ Curl_done(&data->easy_conn, data->result, FALSE);
}
else if(done) {
followtype follow=FOLLOW_NONE;
Curl_posttransfer(data);
/* we're no longer receiving */
- Curl_removeHandleFromPipeline(data, easy->easy_conn->recv_pipe);
+ Curl_removeHandleFromPipeline(data, data->easy_conn->recv_pipe);
/* expire the new receiving pipeline head */
- if(easy->easy_conn->recv_pipe->head)
- Curl_expire(easy->easy_conn->recv_pipe->head->ptr, 1);
+ if(data->easy_conn->recv_pipe->head)
+ Curl_expire(data->easy_conn->recv_pipe->head->ptr, 1);
/* Check if we can move pending requests to send pipe */
Curl_multi_process_pending_handles(multi);
}
else
follow = FOLLOW_RETRY;
- easy->result = Curl_done(&easy->easy_conn, CURLE_OK, FALSE);
- if(CURLE_OK == easy->result) {
- easy->result = Curl_follow(data, newurl, follow);
- if(CURLE_OK == easy->result) {
- multistate(easy, CURLM_STATE_CONNECT);
+ data->result = Curl_done(&data->easy_conn, CURLE_OK, FALSE);
+ if(CURLE_OK == data->result) {
+ data->result = Curl_follow(data, newurl, follow);
+ if(CURLE_OK == data->result) {
+ multistate(data, CURLM_STATE_CONNECT);
result = CURLM_CALL_MULTI_PERFORM;
newurl = NULL; /* handed over the memory ownership to
Curl_follow(), make sure we don't free() it
free(newurl);
newurl = data->req.location;
data->req.location = NULL;
- easy->result = Curl_follow(data, newurl, FOLLOW_FAKE);
- if(CURLE_OK == easy->result)
+ data->result = Curl_follow(data, newurl, FOLLOW_FAKE);
+ if(CURLE_OK == data->result)
newurl = NULL; /* allocation was handed over Curl_follow() */
else
disconnect_conn = TRUE;
}
- multistate(easy, CURLM_STATE_DONE);
+ multistate(data, CURLM_STATE_DONE);
result = CURLM_CALL_MULTI_PERFORM;
}
}
case CURLM_STATE_DONE:
- if(easy->easy_conn) {
+ if(data->easy_conn) {
/* Remove ourselves from the receive pipeline, if we are there. */
Curl_removeHandleFromPipeline(data,
- easy->easy_conn->recv_pipe);
+ data->easy_conn->recv_pipe);
/* Check if we can move pending requests to send pipe */
Curl_multi_process_pending_handles(multi);
- if(easy->easy_conn->bits.stream_was_rewound) {
+ if(data->easy_conn->bits.stream_was_rewound) {
/* This request read past its response boundary so we quickly let
the other requests consume those bytes since there is no
guarantee that the socket will become active again */
}
/* post-transfer command */
- easy->result = Curl_done(&easy->easy_conn, CURLE_OK, FALSE);
+ data->result = Curl_done(&data->easy_conn, CURLE_OK, FALSE);
/*
* If there are other handles on the pipeline, Curl_done won't set
* easy_conn to NULL. In such a case, curl_multi_remove_handle() can
* access free'd data, if the connection is free'd and the handle
* removed before we perform the processing in CURLM_STATE_COMPLETED
*/
- if(easy->easy_conn)
- easy->easy_conn = NULL;
+ if(data->easy_conn)
+ data->easy_conn = NULL;
}
if(data->set.wildcardmatch) {
/* if a wildcard is set and we are not ending -> lets start again
with CURLM_STATE_INIT */
result = CURLM_CALL_MULTI_PERFORM;
- multistate(easy, CURLM_STATE_INIT);
+ multistate(data, CURLM_STATE_INIT);
break;
}
}
/* after we have DONE what we're supposed to do, go COMPLETED, and
it doesn't matter what the Curl_done() returned! */
- multistate(easy, CURLM_STATE_COMPLETED);
+ multistate(data, CURLM_STATE_COMPLETED);
break;
/* Important: reset the conn pointer so that we don't point to memory
that could be freed anytime */
- easy->easy_conn = NULL;
+ data->easy_conn = NULL;
Curl_expire(data, 0); /* stop all timers */
break;
return CURLM_INTERNAL_ERROR;
}
- if(easy->mstate < CURLM_STATE_COMPLETED) {
- if(CURLE_OK != easy->result) {
+ if(data->mstate < CURLM_STATE_COMPLETED) {
+ if(CURLE_OK != data->result) {
/*
* If an error was returned, and we aren't in completed state now,
* then we go to completed and consider this transfer aborted.
data->state.pipe_broke = FALSE;
- if(easy->easy_conn) {
+ if(data->easy_conn) {
/* if this has a connection, unsubscribe from the pipelines */
- easy->easy_conn->writechannel_inuse = FALSE;
- easy->easy_conn->readchannel_inuse = FALSE;
+ data->easy_conn->writechannel_inuse = FALSE;
+ data->easy_conn->readchannel_inuse = FALSE;
Curl_removeHandleFromPipeline(data,
- easy->easy_conn->send_pipe);
+ data->easy_conn->send_pipe);
Curl_removeHandleFromPipeline(data,
- easy->easy_conn->recv_pipe);
+ data->easy_conn->recv_pipe);
/* Check if we can move pending requests to send pipe */
Curl_multi_process_pending_handles(multi);
if(disconnect_conn) {
/* disconnect properly */
- Curl_disconnect(easy->easy_conn, /* dead_connection */ FALSE);
+ Curl_disconnect(data->easy_conn, /* dead_connection */ FALSE);
/* This is where we make sure that the easy_conn pointer is reset.
We don't have to do this in every case block above where a
failure is detected */
- easy->easy_conn = NULL;
+ data->easy_conn = NULL;
}
}
- else if(easy->mstate == CURLM_STATE_CONNECT) {
+ else if(data->mstate == CURLM_STATE_CONNECT) {
/* Curl_connect() failed */
(void)Curl_posttransfer(data);
}
- multistate(easy, CURLM_STATE_COMPLETED);
+ multistate(data, CURLM_STATE_COMPLETED);
}
/* if there's still a connection to use, call the progress function */
- else if(easy->easy_conn && Curl_pgrsUpdate(easy->easy_conn)) {
+ else if(data->easy_conn && Curl_pgrsUpdate(data->easy_conn)) {
/* aborted due to progress callback return code must close the
connection */
- easy->easy_conn->bits.close = TRUE;
+ data->easy_conn->bits.close = TRUE;
/* if not yet in DONE state, go there, otherwise COMPLETED */
- multistate(easy, (easy->mstate < CURLM_STATE_DONE)?
+ multistate(data, (data->mstate < CURLM_STATE_DONE)?
CURLM_STATE_DONE: CURLM_STATE_COMPLETED);
result = CURLM_CALL_MULTI_PERFORM;
}
}
} WHILE_FALSE; /* just to break out from! */
- if(CURLM_STATE_COMPLETED == easy->mstate) {
+ if(CURLM_STATE_COMPLETED == data->mstate) {
/* now fill in the Curl_message with this info */
- msg = &easy->msg;
+ msg = &data->msg;
msg->extmsg.msg = CURLMSG_DONE;
msg->extmsg.easy_handle = data;
- msg->extmsg.data.result = easy->result;
+ msg->extmsg.data.result = data->result;
result = multi_addmsg(multi, msg);
- multistate(easy, CURLM_STATE_MSGSENT);
+ multistate(data, CURLM_STATE_MSGSENT);
}
return result;
CURLMcode curl_multi_perform(CURLM *multi_handle, int *running_handles)
{
struct Curl_multi *multi=(struct Curl_multi *)multi_handle;
- struct SessionHandle *easy;
+ struct SessionHandle *data;
CURLMcode returncode=CURLM_OK;
struct Curl_tree *t;
struct timeval now = Curl_tvnow();
if(!GOOD_MULTI_HANDLE(multi))
return CURLM_BAD_HANDLE;
- easy=multi->easyp;
- while(easy) {
+ data=multi->easyp;
+ while(data) {
CURLMcode result;
- struct WildcardData *wc = &easy->wildcard;
+ struct WildcardData *wc = &data->wildcard;
- if(easy->set.wildcardmatch) {
+ if(data->set.wildcardmatch) {
if(!wc->filelist) {
CURLcode ret = Curl_wildcard_init(wc); /* init wildcard structures */
if(ret)
}
do
- result = multi_runsingle(multi, now, easy);
+ result = multi_runsingle(multi, now, data);
while(CURLM_CALL_MULTI_PERFORM == result);
- if(easy->set.wildcardmatch) {
+ if(data->set.wildcardmatch) {
/* destruct wildcard structures if it is needed */
if(wc->state == CURLWC_DONE || result)
Curl_wildcard_dtor(wc);
if(result)
returncode = result;
- easy = easy->next; /* operate on next handle */
+ data = data->next; /* operate on next handle */
}
/*
CURLMcode curl_multi_cleanup(CURLM *multi_handle)
{
struct Curl_multi *multi=(struct Curl_multi *)multi_handle;
- struct SessionHandle *easy;
- struct SessionHandle *nexteasy;
+ struct SessionHandle *data;
+ struct SessionHandle *nextdata;
if(GOOD_MULTI_HANDLE(multi)) {
multi->type = 0; /* not good anymore */
multi->msglist = NULL;
/* remove all easy handles */
- easy = multi->easyp;
- while(easy) {
- nexteasy=easy->next;
- if(easy->dns.hostcachetype == HCACHE_MULTI) {
+ data = multi->easyp;
+ while(data) {
+ nextdata=data->next;
+ if(data->dns.hostcachetype == HCACHE_MULTI) {
/* clear out the usage of the shared DNS cache */
- Curl_hostcache_clean(easy, easy->dns.hostcache);
- easy->dns.hostcache = NULL;
- easy->dns.hostcachetype = HCACHE_NONE;
+ Curl_hostcache_clean(data, data->dns.hostcache);
+ data->dns.hostcache = NULL;
+ data->dns.hostcachetype = HCACHE_NONE;
}
/* Clear the pointer to the connection cache */
- easy->state.conn_cache = NULL;
+ data->state.conn_cache = NULL;
- easy_addmulti(easy, NULL); /* clear the association */
+ easy_addmulti(data, NULL); /* clear the association */
- easy = nexteasy;
+ data = nextdata;
}
Curl_hash_destroy(multi->hostcache);
* call the callback accordingly.
*/
static void singlesocket(struct Curl_multi *multi,
- struct SessionHandle *easy)
+ struct SessionHandle *data)
{
curl_socket_t socks[MAX_SOCKSPEREASYHANDLE];
int i;
/* Fill in the 'current' struct with the state as it is now: what sockets to
supervise and for what actions */
- curraction = multi_getsock(easy, socks, MAX_SOCKSPEREASYHANDLE);
+ curraction = multi_getsock(data, socks, MAX_SOCKSPEREASYHANDLE);
/* We have 0 .. N sockets already and we get to know about the 0 .. M
sockets we should have from now on. Detect the differences, remove no
}
else {
/* this is a socket we didn't have before, add it! */
- entry = sh_addentry(multi->sockhash, s, easy);
+ entry = sh_addentry(multi->sockhash, s, data);
if(!entry)
/* fatal */
return;
/* we know (entry != NULL) at this point, see the logic above */
if(multi->socket_cb)
- multi->socket_cb(easy,
+ multi->socket_cb(data,
s,
action,
multi->socket_userp,
/* when we've walked over all the sockets we should have right now, we must
make sure to detect sockets that are removed */
- for(i=0; i< easy->numsocks; i++) {
+ for(i=0; i< data->numsocks; i++) {
int j;
- s = easy->sockets[i];
+ s = data->sockets[i];
for(j=0; j<num; j++) {
if(s == socks[j]) {
/* this is still supervised */
/* check if the socket to be removed serves a connection which has
other easy-s in a pipeline. In this case the socket should not be
removed. */
- struct connectdata *easy_conn = easy->easy_conn;
+ struct connectdata *easy_conn = data->easy_conn;
if(easy_conn) {
if(easy_conn->recv_pipe && easy_conn->recv_pipe->size > 1) {
/* the handle should not be removed from the pipe yet */
/* Update the sockhash entry to instead point to the next in line
for the recv_pipe, or the first (in case this particular easy
isn't already) */
- if(entry->easy == easy) {
- if(isHandleAtHead(easy, easy_conn->recv_pipe))
+ if(entry->easy == data) {
+ if(isHandleAtHead(data, easy_conn->recv_pipe))
entry->easy = easy_conn->recv_pipe->head->next->ptr;
else
entry->easy = easy_conn->recv_pipe->head->ptr;
/* Update the sockhash entry to instead point to the next in line
for the send_pipe, or the first (in case this particular easy
isn't already) */
- if(entry->easy == easy) {
- if(isHandleAtHead(easy, easy_conn->send_pipe))
+ if(entry->easy == data) {
+ if(isHandleAtHead(data, easy_conn->send_pipe))
entry->easy = easy_conn->send_pipe->head->next->ptr;
else
entry->easy = easy_conn->send_pipe->head->ptr;
if(remove_sock_from_hash) {
/* in this case 'entry' is always non-NULL */
if(multi->socket_cb)
- multi->socket_cb(easy,
+ multi->socket_cb(data,
s,
CURL_POLL_REMOVE,
multi->socket_userp,
}
}
- memcpy(easy->sockets, socks, num*sizeof(curl_socket_t));
- easy->numsocks = num;
+ memcpy(data->sockets, socks, num*sizeof(curl_socket_t));
+ data->numsocks = num;
}
/*
struct timeval now = Curl_tvnow();
if(checkall) {
- struct SessionHandle *easy;
/* *perform() deals with running_handles on its own */
result = curl_multi_perform(multi, running_handles);
/* walk through each easy handle and do the socket state change magic
and callbacks */
- easy=multi->easyp;
- while(easy) {
- singlesocket(multi, easy);
- easy = easy->next;
+ data=multi->easyp;
+ while(data) {
+ singlesocket(multi, data);
+ data = data->next;
}
/* or should we fall-through and do the timer-based stuff? */
void Curl_multi_process_pending_handles(struct Curl_multi *multi)
{
- struct SessionHandle *easy;
+ struct SessionHandle *data;
- easy=multi->easyp;
- while(easy) {
- if(easy->mstate == CURLM_STATE_CONNECT_PEND) {
- multistate(easy, CURLM_STATE_CONNECT);
+ data=multi->easyp;
+ while(data) {
+ if(data->mstate == CURLM_STATE_CONNECT_PEND) {
+ multistate(data, CURLM_STATE_CONNECT);
/* Make sure that the handle will be processed soonish. */
- Curl_expire(easy, 1);
+ Curl_expire(data, 1);
}
- easy = easy->next; /* operate on next handle */
+ data = data->next; /* operate on next handle */
}
}
void Curl_multi_dump(const struct Curl_multi *multi_handle)
{
struct Curl_multi *multi=(struct Curl_multi *)multi_handle;
- struct SessionHandle *easy;
+ struct SessionHandle *data;
int i;
fprintf(stderr, "* Multi status: %d handles, %d alive\n",
multi->num_easy, multi->num_alive);
- for(easy=multi->easyp; easy; easy = easy->next) {
- if(easy->mstate < CURLM_STATE_COMPLETED) {
+ for(data=multi->easyp; data; data = data->next) {
+ if(data->mstate < CURLM_STATE_COMPLETED) {
/* only display handles that are not completed */
fprintf(stderr, "handle %p, state %s, %d sockets\n",
- (void *)easy,
- statename[easy->mstate], easy->numsocks);
- for(i=0; i < easy->numsocks; i++) {
- curl_socket_t s = easy->sockets[i];
+ (void *)data,
+ statename[data->mstate], data->numsocks);
+ for(i=0; i < data->numsocks; i++) {
+ curl_socket_t s = data->sockets[i];
struct Curl_sh_entry *entry =
Curl_hash_pick(multi->sockhash, (char *)&s, sizeof(s));
entry->action&CURL_POLL_IN?"RECVING":"",
entry->action&CURL_POLL_OUT?"SENDING":"");
}
- if(easy->numsocks)
+ if(data->numsocks)
fprintf(stderr, "\n");
}
}