diff options
| author | Andrey Kleshchev <andreykproductengine@lindenlab.com> | 2022-03-24 18:47:08 +0200 | 
|---|---|---|
| committer | Andrey Kleshchev <andreykproductengine@lindenlab.com> | 2022-03-24 18:47:08 +0200 | 
| commit | 090b506612ccd2344b3748902ae65efe816681c6 (patch) | |
| tree | b3f4e9b3901acf93d7b17827b8b948292b8c1d0a | |
| parent | f5d74ec8272a5a4bc5b53db60fc5d3fe73923974 (diff) | |
SL-16831 Viewer stalls for 10 seconds before displaying a login failure
| -rw-r--r-- | indra/newview/lllogininstance.cpp | 5 | ||||
| -rw-r--r-- | indra/newview/llstartup.cpp | 32 | ||||
| -rw-r--r-- | indra/viewer_components/login/lllogin.cpp | 37 | 
3 files changed, 53 insertions, 21 deletions
diff --git a/indra/newview/lllogininstance.cpp b/indra/newview/lllogininstance.cpp index e81d2cc082..94169ad8dd 100644 --- a/indra/newview/lllogininstance.cpp +++ b/indra/newview/lllogininstance.cpp @@ -251,6 +251,11 @@ void LLLoginInstance::constructAuthParams(LLPointer<LLCredential> user_credentia  	mRequestData["params"] = request_params;  	mRequestData["options"] = requested_options;  	mRequestData["http_params"] = http_params; +#if LL_RELEASE_FOR_DOWNLOAD +    mRequestData["wait_for_updater"] = !gSavedSettings.getBOOL("CmdLineSkipUpdater") && !LLAppViewer::instance()->isUpdaterMissing(); +#else +    mRequestData["wait_for_updater"] = false; +#endif  }  bool LLLoginInstance::handleLoginEvent(const LLSD& event) diff --git a/indra/newview/llstartup.cpp b/indra/newview/llstartup.cpp index 2f6853ba7b..9a99f7c88a 100644 --- a/indra/newview/llstartup.cpp +++ b/indra/newview/llstartup.cpp @@ -2376,19 +2376,31 @@ void show_release_notes_if_required()          && gSavedSettings.getBOOL("UpdaterShowReleaseNotes")          && !gSavedSettings.getBOOL("FirstLoginThisInstall"))      { -        // Instantiate a "relnotes" listener which assumes any arriving event -        // is the release notes URL string. Since "relnotes" is an -        // LLEventMailDrop, this listener will be invoked whether or not the -        // URL has already been posted. If so, it will fire immediately; -        // otherwise it will fire whenever the URL is (later) posted. Either -        // way, it will display the release notes as soon as the URL becomes -        // available. -        LLEventPumps::instance().obtain("relnotes").listen( -            "showrelnotes", -            [](const LLSD& url){ + +#if LL_RELEASE_FOR_DOWNLOAD +        if (!gSavedSettings.getBOOL("CmdLineSkipUpdater") +            && !LLAppViewer::instance()->isUpdaterMissing()) +        { +            // Instantiate a "relnotes" listener which assumes any arriving event +            // is the release notes URL string. Since "relnotes" is an +            // LLEventMailDrop, this listener will be invoked whether or not the +            // URL has already been posted. If so, it will fire immediately; +            // otherwise it will fire whenever the URL is (later) posted. Either +            // way, it will display the release notes as soon as the URL becomes +            // available. +            LLEventPumps::instance().obtain("relnotes").listen( +                "showrelnotes", +                [](const LLSD& url) {                  LLWeb::loadURLInternal(url.asString());                  return false;              }); +        } +        else +#endif // LL_RELEASE_FOR_DOWNLOAD +        { +            LLSD info(LLAppViewer::instance()->getViewerInfo()); +            LLWeb::loadURLInternal(info["VIEWER_RELEASE_NOTES_URL"]); +        }          release_notes_shown = true;      }  } diff --git a/indra/viewer_components/login/lllogin.cpp b/indra/viewer_components/login/lllogin.cpp index 168880dc12..5d50d1e182 100644 --- a/indra/viewer_components/login/lllogin.cpp +++ b/indra/viewer_components/login/lllogin.cpp @@ -251,20 +251,35 @@ void LLLogin::Impl::loginCoro(std::string uri, LLSD login_params)                  // Since sSyncPoint is an LLEventMailDrop, we DEFINITELY want to                  // consume the posted event.                  LLCoros::OverrideConsuming oc(true); -                // Timeout should produce the isUndefined() object passed here. -                LL_DEBUGS("LLLogin") << "Login failure, waiting for sync from updater" << LL_ENDL; -                LLSD updater = llcoro::suspendUntilEventOnWithTimeout(sSyncPoint, 10, LLSD()); -                if (updater.isUndefined()) -                { -                    LL_WARNS("LLLogin") << "Failed to hear from updater, proceeding with fail.login" -                                        << LL_ENDL; -                } -                else +                LLSD responses(mAuthResponse["responses"]); +                LLSD updater; + +                if (printable_params["wait_for_updater"].asBoolean())                  { -                    LL_DEBUGS("LLLogin") << "Got responses from updater and login.cgi" << LL_ENDL; +                    std::string reason_response = responses["data"]["reason"].asString(); +                    // Timeout should produce the isUndefined() object passed here. +                    if (reason_response == "update") +                    { +                        LL_INFOS("LLLogin") << "Login failure, waiting for sync from updater" << LL_ENDL; +                        updater = llcoro::suspendUntilEventOnWithTimeout(sSyncPoint, 10, LLSD()); +                    } +                    else +                    { +                        LL_DEBUGS("LLLogin") << "Login failure, waiting for sync from updater" << LL_ENDL; +                        updater = llcoro::suspendUntilEventOnWithTimeout(sSyncPoint, 3, LLSD()); +                    } +                    if (updater.isUndefined()) +                    { +                        LL_WARNS("LLLogin") << "Failed to hear from updater, proceeding with fail.login" +                                            << LL_ENDL; +                    } +                    else +                    { +                        LL_DEBUGS("LLLogin") << "Got responses from updater and login.cgi" << LL_ENDL; +                    }                  } +                  // Let the fail.login handler deal with empty updater response. -                LLSD responses(mAuthResponse["responses"]);                  responses["updater"] = updater;                  sendProgressEvent("offline", "fail.login", responses);              }  | 
