From c5489932cfde7f4d6c7ad17224c6eab98dd57191 Mon Sep 17 00:00:00 2001 From: Aleric Inglewood Date: Tue, 4 Jun 2013 00:31:44 +0200 Subject: [PATCH] Fix ASSERT(!mUploadFinished || mBeingRedirected) Hopefully this is the last case. --- indra/llmessage/aicurlthread.cpp | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/indra/llmessage/aicurlthread.cpp b/indra/llmessage/aicurlthread.cpp index 4a9c9198c..6ede742b8 100644 --- a/indra/llmessage/aicurlthread.cpp +++ b/indra/llmessage/aicurlthread.cpp @@ -2196,6 +2196,7 @@ size_t BufferedCurlEasyRequest::curlHeaderCallback(char* data, size_t size, size return header_len; } std::string header(header_line, header_len); + bool being_redirected = false; bool done = false; if (!LLStringUtil::_isASCII(header)) { @@ -2240,7 +2241,7 @@ size_t BufferedCurlEasyRequest::curlHeaderCallback(char* data, size_t size, size if (status >= 300 && status < 400) { // Timeout administration needs to know if we're being redirected. - self_w->httptimeout()->being_redirected(); + being_redirected = true; } } // Update HTTP bandwidth. @@ -2254,6 +2255,14 @@ size_t BufferedCurlEasyRequest::curlHeaderCallback(char* data, size_t size, size // Transfer timed out. Return 0 which will abort with error CURLE_WRITE_ERROR. return 0; } + if (being_redirected) + { + // Call this after data_received(), because that might reset mBeingRedirected if it causes a late- upload_finished! + // Ie, when the upload finished was not detected and this is a redirect header then the call to data_received() + // will call upload_finished() which sets HTTPTimeout::mUploadFinished (and resets HTTPTimeout::mBeingRedirected), + // after which we set HTTPTimeout::mBeingRedirected here because we ARE being redirected. + self_w->httptimeout()->being_redirected(); + } if (done) { return header_len;