Skip to content
Snippets Groups Projects
Commit 544f2f74 authored by Daniel Stenberg's avatar Daniel Stenberg
Browse files

- Igor filed bug #2111613 (http://curl.haxx.se/bug/view.cgi?id=2111613) that

  eventually identified a flaw in how the multi_socket interface in some cases
  missed to call the timeout callback when easy interfaces are removed and
  added within the same millisecond.
parent 450348d6
No related branches found
No related tags found
No related merge requests found
......@@ -7,6 +7,11 @@
Changelog
Daniel Stenberg (8 Oct 2008)
- Igor filed bug #2111613 (http://curl.haxx.se/bug/view.cgi?id=2111613) that
eventually identified a flaw in how the multi_socket interface in some cases
missed to call the timeout callback when easy interfaces are removed and
added within the same millisecond.
- Igor Novoseltsev brought a patch that introduced two new options to
curl_easy_setopt: CURLOPT_USERNAME and CURLOPT_PASSWORD that sort of
deprecates the good old CURLOPT_USERPWD since they allow applications to set
......
......@@ -34,6 +34,7 @@ This release includes the following bugfixes:
o CURLOPT_RANGE now works for SFTP downloads
o FTP SIZE response 550 now causes CURLE_REMOTE_FILE_NOT_FOUND
o CURLINFO_PRIMARY_IP fixed for persistent connection re-use cases
o remove_handle/add_handle multi interface timer callback flaw
This release includes the following known bugs:
......
......@@ -532,6 +532,18 @@ CURLMcode curl_multi_add_handle(CURLM *multi_handle,
/* increase the alive-counter */
multi->num_alive++;
/* A somewhat crude work-around for a little glitch in update_timer() that
happens if the lastcall time is set to the same time when the handle is
removed as when the next handle is added, as then the check in
update_timer() that prevents calling the application multiple times with
the same timer infor will not trigger and then the new handle's timeout
will not be notified to the app.
The work-around is thus simply to clear the 'lastcall' variable to force
update_timer() to always trigger a callback to the app when a new easy
handle is added */
memset(&multi->timer_lastcall, 0, sizeof(multi->timer_lastcall));
update_timer(multi);
return CURLM_OK;
}
......@@ -1013,9 +1025,9 @@ static CURLMcode multi_runsingle(struct Curl_multi *multi,
easy->easy_handle->set.errorbuffer[0] = '\0';
easy->easy_handle->state.errorbuf = FALSE;
easy->result = CURLE_OK;
result = CURLM_CALL_MULTI_PERFORM;
multistate(easy, CURLM_STATE_CONNECT);
easy->result = CURLE_OK;
result = CURLM_CALL_MULTI_PERFORM;
multistate(easy, CURLM_STATE_CONNECT);
}
else if (CURLE_OK == easy->result) {
if(!easy->easy_conn->bits.tunnel_connecting)
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment