summaryrefslogtreecommitdiff
path: root/indra/newview/llviewermessage.cpp
diff options
context:
space:
mode:
authorAndrew Meadows <leviathan@lindenlab.com>2026-05-27 09:33:09 -0700
committerGitHub <noreply@github.com>2026-05-27 09:33:09 -0700
commitf99e2233a40e3a7b88e6c54aa89a1bc0bcd76456 (patch)
treed9853e2f709615082770f2ea8ece4801345b866b /indra/newview/llviewermessage.cpp
parente63651672fe66fe2c60bfb6c823fe78ed6f1b28d (diff)
Log failed delivery of crucial vewer-->simulator connection UDP messages (#5568)
Diffstat (limited to 'indra/newview/llviewermessage.cpp')
-rw-r--r--indra/newview/llviewermessage.cpp21
1 files changed, 20 insertions, 1 deletions
diff --git a/indra/newview/llviewermessage.cpp b/indra/newview/llviewermessage.cpp
index 812ba76551..1f1ff30b8f 100644
--- a/indra/newview/llviewermessage.cpp
+++ b/indra/newview/llviewermessage.cpp
@@ -418,7 +418,26 @@ void send_complete_agent_movement(const LLHost& sim_host)
msg->addUUIDFast(_PREHASH_AgentID, gAgent.getID());
msg->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID());
msg->addU32Fast(_PREHASH_CircuitCode, msg->mOurCircuitCode);
- msg->sendReliable(sim_host);
+
+ // build a lambda to be used as callback on ACK or timeout
+ void (*complete_agent_movement_callback)(void**, S32) = [](void**, S32 result)
+ {
+ if(LLApp::isExiting()) return;
+ if (result != LL_ERR_NOERR)
+ {
+ LL_WARNS("Messaging") << "CompleteAgentMovement failed with err=" << result << LL_ENDL;
+ }
+ };
+
+ // We use same retry strategy as UseCircuitCode because this is a crucial message
+ // that MUST arrive else we'll suffer a failed login/teleport/region-cross
+ msg->sendReliable(
+ sim_host,
+ gSavedSettings.getS32("UseCircuitCodeMaxRetries"),
+ false,
+ (F32Seconds)gSavedSettings.getF32("UseCircuitCodeTimeout"),
+ complete_agent_movement_callback,
+ NULL);
}
void process_logout_reply(LLMessageSystem* msg, void**)