diff options
author | Daniel Stenberg <daniel@haxx.se> | 2011-10-27 12:46:29 +0200 |
---|---|---|
committer | Daniel Stenberg <daniel@haxx.se> | 2011-10-27 12:46:29 +0200 |
commit | b0d42da26bd66baf326781149bdbdd7336d51269 (patch) | |
tree | 6a57bc494a02ccebc54fed36fa3f663cc4f51b67 | |
parent | 120025b7f853562af685e6385794c518eccc28c4 (diff) |
multi: start ftp state machine when switching to DO_MORE
This extends the fix from commit d7934b8bd491
When the multi state is changed within the multi_runsingle from DOING to
DO_MORE, we didn't immediately start the FTP state machine again. That
then left the FTP state in FTP_STOP. When curl_multi_fdset() was
subsequently called, the ftp_domore_getsock() function would return the
wrong fd info.
Reported by: Gokhan Sengun
-rw-r--r-- | lib/multi.c | 17 |
1 files changed, 5 insertions, 12 deletions
diff --git a/lib/multi.c b/lib/multi.c index 6e4ec37a8..5026f8d2d 100644 --- a/lib/multi.c +++ b/lib/multi.c @@ -1339,18 +1339,11 @@ static CURLMcode multi_runsingle(struct Curl_multi *multi, &dophase_done); if(CURLE_OK == easy->result) { if(dophase_done) { - /* after DO, go PERFORM... or DO_MORE */ - if(easy->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); - result = CURLM_OK; - } - else { - /* we're done with the DO, now DO_DONE */ - multistate(easy, CURLM_STATE_DO_DONE); - result = CURLM_CALL_MULTI_PERFORM; - } + /* after DO, go DO_DONE or DO_MORE */ + multistate(easy, easy->easy_conn->bits.do_more? + CURLM_STATE_DO_MORE: + CURLM_STATE_DO_DONE); + result = CURLM_CALL_MULTI_PERFORM; } /* dophase_done */ } else { |