]> granicus.if.org Git - curl/commitdiff
url: handle abortion by read/write callbacks, too
authorKamil Dudka <kdudka@redhat.com>
Mon, 9 Sep 2013 11:10:53 +0000 (13:10 +0200)
committerKamil Dudka <kdudka@redhat.com>
Mon, 9 Sep 2013 11:23:04 +0000 (13:23 +0200)
Otherwise, the FTP protocol would unnecessarily hang 60 seconds if
aborted in the CURLOPT_HEADERFUNCTION callback.

Reported by: Tomas Mlcoch
Bug: https://bugzilla.redhat.com/1005686

RELEASE-NOTES
lib/url.c

index bae2d93ce8c44fb0053748e89de32da11d60907a..68515c7a6e46abfaeac3095a900cccd7d5d646fa 100644 (file)
@@ -29,6 +29,7 @@ This release includes the following bugfixes:
  o TFTP: make the CURLOPT_LOW_SPEED* options work [4]
  o curl.h: name space pollution by "enum type" [5]
  o multi: move on from STATE_DONE faster [6]
+ o FTP: 60 secs delay if aborted in the CURLOPT_HEADERFUNCTION callback [11]
 
 This release includes the following known bugs:
 
@@ -55,3 +56,4 @@ References to bug reports and discussions on issues:
  [8] = http://curl.haxx.se/bug/view.cgi?id=1267
  [9] = http://curl.haxx.se/mail/lib-2013-08/0234.html
  [10] = http://curl.haxx.se/mail/lib-2013-08/0136.html
+ [11] = https://bugzilla.redhat.com/1005686
index f6da3ca268bb6daa6d8905829d578ddc17a22388..50ce80df495a99433bba77f3de02d123189971d7 100644 (file)
--- a/lib/url.c
+++ b/lib/url.c
@@ -5743,12 +5743,18 @@ CURLcode Curl_done(struct connectdata **connp,
     conn->dns_entry = NULL;
   }
 
-  if(status == CURLE_ABORTED_BY_CALLBACK)
+  switch(status) {
+  case CURLE_ABORTED_BY_CALLBACK:
+  case CURLE_READ_ERROR:
+  case CURLE_WRITE_ERROR:
     /* When we're aborted due to a callback return code it basically have to
        be counted as premature as there is trouble ahead if we don't. We have
        many callbacks and protocols work differently, we could potentially do
        this more fine-grained in the future. */
     premature = TRUE;
+  default:
+    break;
+  }
 
   /* this calls the protocol-specific function pointer previously set */
   if(conn->handler->done)