remove_handle: clear expire timers after multi_done()

Since 59041f0, a new timer might be set in multi_done() so the clearing
of the timers need to happen afterwards!

Reported-by: Max Kellermann
Fixes #4575
Closes #4583
This commit is contained in:
Daniel Stenberg 2019-11-10 16:23:53 +01:00
parent 86e26996c7
commit 13182b33f7
No known key found for this signature in database
GPG Key ID: 5CC908FDB71E12C2
1 changed files with 5 additions and 5 deletions

View File

@ -695,11 +695,6 @@ CURLMcode curl_multi_remove_handle(struct Curl_multi *multi,
easy_owns_conn = TRUE;
}
/* 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_clear(data);
if(data->conn) {
/* we must call multi_done() here (if we still own the connection) so that
@ -715,6 +710,11 @@ CURLMcode curl_multi_remove_handle(struct Curl_multi *multi,
}
}
/* 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. Do it after multi_done() in case that sets another time! */
Curl_expire_clear(data);
if(data->connect_queue.ptr)
/* the handle was in the pending list waiting for an available connection,
so go ahead and remove it */