MultiRangeHttpFetcher::ReceivedBytes should signal the caller correctly.
am: 028ea416dc
Change-Id: I117c88b7481040cc171ea314695ebaeb2fd901e1
diff --git a/common/multi_range_http_fetcher.cc b/common/multi_range_http_fetcher.cc
index 0a19c6a..d39b7f9 100644
--- a/common/multi_range_http_fetcher.cc
+++ b/common/multi_range_http_fetcher.cc
@@ -111,6 +111,7 @@
pending_transfer_ended_ = true;
LOG(INFO) << "Terminating transfer.";
fetcher->TerminateTransfer();
+ return false;
}
return true;
}
diff --git a/libcurl_http_fetcher.cc b/libcurl_http_fetcher.cc
index 50ddeb0..7cf3341 100644
--- a/libcurl_http_fetcher.cc
+++ b/libcurl_http_fetcher.cc
@@ -544,10 +544,18 @@
}
}
bytes_downloaded_ += payload_size;
- in_write_callback_ = true;
- if (delegate_ && !delegate_->ReceivedBytes(this, ptr, payload_size))
- return payload_size;
- in_write_callback_ = false;
+ if (delegate_) {
+ in_write_callback_ = true;
+ auto should_terminate = !delegate_->ReceivedBytes(this, ptr, payload_size);
+ in_write_callback_ = false;
+ if (should_terminate) {
+ LOG(INFO) << "Requesting libcurl to terminate transfer.";
+ // Returning an amount that differs from the received size signals an
+ // error condition to libcurl, which will cause the transfer to be
+ // aborted.
+ return 0;
+ }
+ }
return payload_size;
}