Changelog
+Daniel (21 September 2006)
+- Added test case 531 in an attempt to repeat bug report #1561470
+ (http://curl.haxx.se/bug/view.cgi?id=1561470) that is said to crash when an
+ FTP upload fails with the multi interface. It did not, but I made a failed
+ upload still assume the control connection to be fine.
+
Daniel (20 September 2006)
- Armel Asselin fixed problems when you gave a proxy URL with user name and
empty password or no password at all. Test case 278 and 279 were added to
case CURLE_FTP_PORT_FAILED:
case CURLE_FTP_COULDNT_SET_BINARY:
case CURLE_FTP_COULDNT_RETR_FILE:
+ case CURLE_FTP_COULDNT_STOR_FILE:
case CURLE_FTP_ACCESS_DENIED:
/* the connection stays alive fine even though this happened */
/* fall-through */
result=Curl_setup_transfer(conn, -1, -1, FALSE, NULL, -1, NULL);
/* end of transfer */
- DEBUGF(infof(data, "DO-MORE phase ends\n"));
+ DEBUGF(infof(data, "DO-MORE phase ends with %d\n", result));
return result;
}
if(easy->easy_conn) {
/* Set up the association right */
easy->easy_conn->data = easy->easy_handle;
+
+ /* Curl_done() clears the conn->data field to lose the association
+ between the easy handle and the connection */
Curl_done(&easy->easy_conn, easy->result);
+
+ if(easy->easy_conn)
+ /* the connection is still alive, set back the association to enable
+ the check below to trigger TRUE */
+ easy->easy_conn->data = easy->easy_handle;
}
/* If this easy_handle was the last one in charge for one or more
Thus, we need to check for all connections in the shared cache that
points to this handle and are using PROT_CLOSEACTION. If there's any,
- we need to add this handle to the list of "easy_handls kept around for
- nice closure".
+ we need to add this handle to the list of "easy handles kept around for
+ nice connection closures".
*/
if(multi_conn_using(multi, easy->easy_handle))
/* There's at least one connection using this handle so we must keep
if(CURLE_OK == easy->result)
easy->result = Curl_readwrite_init(easy->easy_conn);
+ else
+ /* Remove ourselves from the send pipeline */
+ Curl_removeHandleFromPipeline(easy->easy_handle,
+ easy->easy_conn->send_pipe);
if(CURLE_OK == easy->result) {
multistate(easy, CURLM_STATE_DO_DONE);
break;
case CURLM_STATE_COMPLETED:
- if (easy->easy_handle->state.cancelled) {
+ if (easy->easy_handle->state.cancelled)
/* Go into the CANCELLED state if we were cancelled */
multistate(easy, CURLM_STATE_CANCELLED);
- }
/* this is a completed transfer, it is likely to still be connected */