multi: start ftp state machine when switching to DO_MORE
authorDaniel Stenberg <daniel@haxx.se>
Thu, 27 Oct 2011 10:46:29 +0000 (12:46 +0200)
committerDaniel Stenberg <daniel@haxx.se>
Thu, 27 Oct 2011 10:46:29 +0000 (12:46 +0200)
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

lib/multi.c

index 6e4ec37..5026f8d 100644 (file)
@@ -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 {