Skip to content

Commit

Permalink
curl_multi_remove_handle: remove dead code
Browse files Browse the repository at this point in the history
Coverify CID 1157776. Removed a superfluous if() that always evaluated
true (and an else clause that never ran), and then re-indented the
function accordingly.
  • Loading branch information
bagder committed Oct 3, 2014
1 parent b9a34e8 commit b0bfae1
Showing 1 changed file with 92 additions and 97 deletions.
189 changes: 92 additions & 97 deletions lib/multi.c
Expand Up @@ -487,6 +487,9 @@ CURLMcode curl_multi_remove_handle(CURLM *multi_handle,
struct Curl_multi *multi=(struct Curl_multi *)multi_handle;
struct SessionHandle *easy = curl_handle;
struct SessionHandle *data = easy;
bool premature;
bool easy_owns_conn;
struct curl_llist_element *e;

/* First, make some basic checks that the CURLM handle is a good handle */
if(!GOOD_MULTI_HANDLE(multi))
Expand All @@ -500,126 +503,118 @@ CURLMcode curl_multi_remove_handle(CURLM *multi_handle,
if(!data->multi)
return CURLM_OK; /* it is already removed so let's say it is fine! */

if(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
nice to put the easy_handle in a good known state when this returns. */
if(premature)
/* this handle is "alive" so we need to count down the total number of
alive connections when this is removed */
multi->num_alive--;
premature = (data->mstate < CURLM_STATE_COMPLETED) ? TRUE : FALSE;
easy_owns_conn = (data->easy_conn && (data->easy_conn->data == easy)) ?
TRUE : FALSE;

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. */
connclose(data->easy_conn, "Removed with partial response");
/* Set connection owner so that Curl_done() closes it.
We can sefely do this here since connection is killed. */
data->easy_conn->data = easy;
}
/* If the 'state' is not INIT or COMPLETED, we might need to do something
nice to put the easy_handle in a good known state when this returns. */
if(premature)
/* this handle is "alive" so we need to count down the total number of
alive connections when this is removed */
multi->num_alive--;

/* 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(data, 0);
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. */
connclose(data->easy_conn, "Removed with partial response");
/* Set connection owner so that Curl_done() closes it.
We can sefely do this here since connection is killed. */
data->easy_conn->data = easy;
}

/* destroy the timeout list that is held in the easy handle */
if(data->state.timeoutlist) {
Curl_llist_destroy(data->state.timeoutlist, NULL);
data->state.timeoutlist = 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(data, 0);

if(data->dns.hostcachetype == HCACHE_MULTI) {
/* stop using the multi handle's DNS cache */
data->dns.hostcache = NULL;
data->dns.hostcachetype = HCACHE_NONE;
}
/* destroy the timeout list that is held in the easy handle */
if(data->state.timeoutlist) {
Curl_llist_destroy(data->state.timeoutlist, NULL);
data->state.timeoutlist = NULL;
}

if(data->easy_conn) {
if(data->dns.hostcachetype == HCACHE_MULTI) {
/* stop using the multi handle's DNS cache */
data->dns.hostcache = NULL;
data->dns.hostcachetype = HCACHE_NONE;
}

/* we must call Curl_done() here (if we still "own it") so that we don't
leave a half-baked one around */
if(easy_owns_conn) {
if(data->easy_conn) {

/* Curl_done() clears the conn->data field to lose the association
between the easy handle and the connection
/* we must call Curl_done() here (if we still "own it") so that we don't
leave a half-baked one around */
if(easy_owns_conn) {

Note that this ignores the return code simply because there's
nothing really useful to do with it anyway! */
(void)Curl_done(&data->easy_conn, data->result, premature);
}
else
/* Clear connection pipelines, if Curl_done above was not called */
Curl_getoff_all_pipelines(data, data->easy_conn);
/* Curl_done() clears the conn->data field to lose the association
between the easy handle and the connection
Note that this ignores the return code simply because there's
nothing really useful to do with it anyway! */
(void)Curl_done(&data->easy_conn, data->result, premature);
}
else
/* Clear connection pipelines, if Curl_done above was not called */
Curl_getoff_all_pipelines(data, data->easy_conn);
}

Curl_wildcard_dtor(&data->wildcard);
Curl_wildcard_dtor(&data->wildcard);

/* as this was using a shared connection cache we clear the pointer
to that since we're not part of that multi handle anymore */
data->state.conn_cache = NULL;
/* as this was using a shared connection cache we clear the pointer to that
since we're not part of that multi handle anymore */
data->state.conn_cache = NULL;

/* change state without using multistate(), only to make singlesocket() do
what we want */
data->mstate = CURLM_STATE_COMPLETED;
singlesocket(multi, easy); /* to let the application know what sockets
that vanish with this handle */
/* change state without using multistate(), only to make singlesocket() do
what we want */
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(data->easy_conn) {
data->easy_conn->data = NULL;
data->easy_conn = NULL;
}
/* Remove the association between the connection and the handle */
if(data->easy_conn) {
data->easy_conn->data = NULL;
data->easy_conn = NULL;
}

data->multi = NULL; /* clear the association to this multi handle */
data->multi = NULL; /* clear the association to this multi handle */

{
/* make sure there's no pending message in the queue sent from this easy
handle */
struct curl_llist_element *e;
/* make sure there's no pending message in the queue sent from this easy
handle */

for(e = multi->msglist->head; e; e = e->next) {
struct Curl_message *msg = e->ptr;
for(e = multi->msglist->head; e; e = e->next) {
struct Curl_message *msg = e->ptr;

if(msg->extmsg.easy_handle == easy) {
Curl_llist_remove(multi->msglist, e, NULL);
/* there can only be one from this specific handle */
break;
}
}
if(msg->extmsg.easy_handle == easy) {
Curl_llist_remove(multi->msglist, e, NULL);
/* there can only be one from this specific handle */
break;
}
}

/* make the previous node point to our next */
if(data->prev)
data->prev->next = data->next;
else
multi->easyp = data->next; /* point to first node */

/* make our next point to our previous node */
if(data->next)
data->next->prev = data->prev;
else
multi->easylp = data->prev; /* point to last node */
/* make the previous node point to our next */
if(data->prev)
data->prev->next = data->next;
else
multi->easyp = data->next; /* point to first node */

/* NOTE NOTE NOTE
We do not touch the easy handle here! */
/* make our next point to our previous node */
if(data->next)
data->next->prev = data->prev;
else
multi->easylp = data->prev; /* point to last node */

multi->num_easy--; /* one less to care about now */
/* NOTE NOTE NOTE
We do not touch the easy handle here! */
multi->num_easy--; /* one less to care about now */

update_timer(multi);
return CURLM_OK;
}
else
return CURLM_BAD_EASY_HANDLE; /* twasn't found */
update_timer(multi);
return CURLM_OK;
}

bool Curl_multi_pipeline_enabled(const struct Curl_multi *multi)
Expand Down

0 comments on commit b0bfae1

Please sign in to comment.