summaryrefslogtreecommitdiff
path: root/indra/viewer_components/login/lllogin.cpp
diff options
context:
space:
mode:
authorNat Goodspeed <nat@lindenlab.com>2010-01-12 15:27:01 -0500
committerNat Goodspeed <nat@lindenlab.com>2010-01-12 15:27:01 -0500
commit7b03037cacc99c975624c44eef3c9071198adeed (patch)
tree8212dd626860174558885bddc06e75b72316ca74 /indra/viewer_components/login/lllogin.cpp
parent3b2697cb93e6b8a1f1281aeab0e960bc6704d8c4 (diff)
EXT-4193: Use different reply pumps for SRV and XMLRPC requests.
This eliminates the timing hole (introduced by EXT-3934 fix) in which a belated SRV response could confuse the XMLRPC response code. Extend unit tests to positively drive the bug and validate the fix.
Diffstat (limited to 'indra/viewer_components/login/lllogin.cpp')
-rw-r--r--indra/viewer_components/login/lllogin.cpp16
1 files changed, 10 insertions, 6 deletions
diff --git a/indra/viewer_components/login/lllogin.cpp b/indra/viewer_components/login/lllogin.cpp
index f5bda71846..b9f61ca7e1 100644
--- a/indra/viewer_components/login/lllogin.cpp
+++ b/indra/viewer_components/login/lllogin.cpp
@@ -143,7 +143,7 @@ void LLLogin::Impl::login_(LLCoros::self& self, std::string uri, LLSD credential
<< " with uri '" << uri << "', credentials " << printable_credentials << LL_ENDL;
// Arriving in SRVRequest state
- LLEventStream replyPump("reply", true);
+ LLEventStream replyPump("SRVreply", true);
// Should be an array of one or more uri strings.
LLSD rewrittenURIs;
{
@@ -181,6 +181,10 @@ void LLLogin::Impl::login_(LLCoros::self& self, std::string uri, LLSD credential
} // we no longer need the filter
LLEventPump& xmlrpcPump(LLEventPumps::instance().obtain("LLXMLRPCTransaction"));
+ // EXT-4193: use a DIFFERENT reply pump than for the SRV request. We used
+ // to share them -- but the EXT-3934 fix made it possible for an abandoned
+ // SRV response to arrive just as we were expecting the XMLRPC response.
+ LLEventStream loginReplyPump("loginreply", true);
// Loop through the rewrittenURIs, counting attempts along the way.
// Because of possible redirect responses, we may make more than one
@@ -191,7 +195,7 @@ void LLLogin::Impl::login_(LLCoros::self& self, std::string uri, LLSD credential
urit != urend; ++urit)
{
LLSD request(credentials);
- request["reply"] = replyPump.getName();
+ request["reply"] = loginReplyPump.getName();
request["uri"] = *urit;
std::string status;
@@ -216,11 +220,11 @@ void LLLogin::Impl::login_(LLCoros::self& self, std::string uri, LLSD credential
// possible for the reply to arrive before the post() call
// returns. Subsequent responses, of course, must be awaited
// without posting again.
- for (mAuthResponse = validateResponse(replyPump.getName(),
- postAndWait(self, request, xmlrpcPump, replyPump, "reply"));
+ for (mAuthResponse = validateResponse(loginReplyPump.getName(),
+ postAndWait(self, request, xmlrpcPump, loginReplyPump, "reply"));
mAuthResponse["status"].asString() == "Downloading";
- mAuthResponse = validateResponse(replyPump.getName(),
- waitForEventOn(self, replyPump)))
+ mAuthResponse = validateResponse(loginReplyPump.getName(),
+ waitForEventOn(self, loginReplyPump)))
{
// Still Downloading -- send progress update.
sendProgressEvent("offline", "downloading");