HTTPTimeout work in progress

* Avoid using CurlEasyRequest::mTimeout for HTTPTime::done and
  HTTPTime::print_diagnostics when it might be NULL.
* Comment fixes.
* Indentation fix.
This commit is contained in:
Aleric Inglewood
2012-10-15 21:07:17 +02:00
parent bb8ea493d6
commit 8ba127d4c5
3 changed files with 32 additions and 9 deletions

View File

@@ -1260,6 +1260,19 @@ void CurlEasyRequest::removed_from_multi_handle(AICurlEasyRequest_wat& curl_easy
mEventsTarget->removed_from_multi_handle(curl_easy_request_w);
}
void CurlEasyRequest::print_diagnostics(AICurlEasyRequest_wat const& curlEasyRequest_w, CURLcode code)
{
if (code == CURLE_OPERATION_TIMEDOUT)
{
// mTimeout SHOULD always be set, but I see no reason not to test it, as
// this is far from the code that guaranteeds that it is set.
if (mTimeout)
{
mTimeout->print_diagnostics(curlEasyRequest_w);
}
}
}
//-----------------------------------------------------------------------------
// CurlResponderBuffer

View File

@@ -337,11 +337,22 @@ class CurlEasyRequest : public CurlEasyHandle {
void set_timeout_opts(void);
public:
// Called by MultiHandle::check_run_count() to store result code that is returned by getResult.
// Called by MultiHandle::finish_easy_request() to store result code that is returned by getResult.
void storeResult(CURLcode result) { mResult = result; }
// Called by MultiHandle::check_run_count() when the curl easy handle is done.
void done(AICurlEasyRequest_wat& curl_easy_request_w) { finished(curl_easy_request_w); }
// Called by MultiHandle::finish_easy_request() when the curl easy handle is done.
void done(AICurlEasyRequest_wat& curl_easy_request_w, CURLcode result)
{
if (mTimeout)
{
// Update timeout administration.
mTimeout->done(curl_easy_request_w, result);
}
finished(curl_easy_request_w);
}
// Called by in case of an error.
void print_diagnostics(AICurlEasyRequest_wat const& curlEasyRequest_w, CURLcode code);
// Called by MultiHandle::check_run_count() to fill info with the transfer info.
void getTransferInfo(AICurlInterface::TransferInfo* info);

View File

@@ -1713,10 +1713,8 @@ void MultiHandle::finish_easy_request(AICurlEasyRequest const& easy_request, CUR
Dout(dc::finish, "pretransfer_time: " << pretransfer_time << ", starttransfer_time: " << starttransfer_time <<
". [CURLINFO_PRIVATE = " << (void*)easy_request.get_ptr().get() << "]");
#endif
// Update timeout administration.
curl_easy_request_w->httptimeout()->done(curl_easy_request_w, result);
// Signal that this easy handle finished.
curl_easy_request_w->done(curl_easy_request_w);
curl_easy_request_w->done(curl_easy_request_w, result);
}
//-----------------------------------------------------------------------------
@@ -2096,13 +2094,14 @@ void CurlResponderBuffer::processOutput(AICurlEasyRequest_wat& curl_easy_request
curl_easy_request_w->setopt(CURLOPT_FRESH_CONNECT, TRUE);
}
llassert(mResponder); // AIFIXME: We always have a responder now, no?
if (mResponder)
{
if (code == CURLE_OPERATION_TIMEDOUT)
if (code != CURLE_OK)
{
curl_easy_request_w->httptimeout()->print_diagnostics(curl_easy_request_w);
curl_easy_request_w->print_diagnostics(curl_easy_request_w, code);
}
if (mEventsTarget)
if (mEventsTarget)
{
// Only the responder registers for these events.
llassert(mEventsTarget == mResponder.get());