Achievements: Don't start a password login while a token login is pending

rc_client answers a second login with RC_INVALID_STATE, synchronously,
and login_password_callback then cleared g_isLoggingIn while the token
login was still running. IsBlockingExecution stopped blocking, and a game
started then ran without achievements.

Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
This commit is contained in:
Henrik RydgårdandClaude Opus 5.5 committed 2026-09-30 11:25:37 -06:00
1 parent bf2b84db74
commit 71bce6343f
1 file changed
+2 -1
+2 -1
View File
@@ -853,7 +853,8 @@ static void login_password_callback(int result, const char *error_message, rc_cl
bool LoginAsync(const char *username, const char *password) {
auto di = GetI18NCategory(I18NCat::DIALOG);
if (IsLoggedIn() || std::strlen(username) == 0 || std::strlen(password) == 0)
// While a token login is pending, rc_client refuses another login, and the callback for that would clear g_isLoggingIn early.
if (IsLoggedIn() || g_isLoggingIn || std::strlen(username) == 0 || std::strlen(password) == 0)
return false;
g_OSD.SetProgressBar("cheevos_async_login", di->T("Logging in..."), 0, 0, 0, 0.0f);