Merge branch 'release/2026.01' of https://github.com/secondlife/viewer

# Conflicts:
#	autobuild.xml
master
Ansariel 2026-02-25 12:19:01 +01:00
commit 7260da8d49
2 changed files with 19 additions and 2 deletions

View File

@ -437,7 +437,7 @@ struct LLWindowWin32::LLWindowWin32Thread : public LL::ThreadPool
{
if (!mWindowTimeout)
{
mWindowTimeout = std::make_unique<LLWatchdogTimeout>("mainloop");
mWindowTimeout = std::make_unique<LLWatchdogTimeout>("WindowThread");
// supposed to be executed within run(),
// so no point checking if thread is alive
resumeTimeout("TimeoutInit");

View File

@ -1937,17 +1937,20 @@ bool LLAppViewer::doFrame()
if (LLApp::isExiting())
{
pingMainloopTimeout("Main:qSnapshot");
// Save snapshot for next time, if we made it through initialization
if (STATE_STARTED == LLStartUp::getStartupState())
{
saveFinalSnapshot();
}
pingMainloopTimeout("Main:TerminateVoice");
if (LLVoiceClient::instanceExists())
{
LLVoiceClient::getInstance()->terminate();
}
pingMainloopTimeout("Main:TerminatePump");
delete gServicePump;
gServicePump = NULL;
@ -3776,7 +3779,6 @@ bool LLAppViewer::initWindow()
app->createErrorMarker(LAST_EXEC_FROZE);
}
});
gViewerWindow->getWindow()->initWatchdog();
}
// <FS:Ansariel> Init group notices, IMs and chiclets position before the
@ -4973,6 +4975,7 @@ void LLAppViewer::requestQuit()
return;
}
pingMainloopTimeout("Main:qMetrics");
// Try to send metrics back to the grid
metricsSend(!gDisconnected);
@ -4988,6 +4991,7 @@ void LLAppViewer::requestQuit()
LLHUDManager::getInstance()->sendEffects();
effectp->markDead() ;//remove it.
pingMainloopTimeout("Main:qFloaters");
// Attempt to close all floaters that might be
// editing things.
if (gFloaterView)
@ -4996,6 +5000,7 @@ void LLAppViewer::requestQuit()
gFloaterView->closeAllChildren(true);
mClosingFloaters = true;
}
pingMainloopTimeout("Main:qStats");
// Send preferences once, when exiting
// <FS:Ansariel> Don't send all non-default settings which might result in a violation of GDPR
@ -5005,6 +5010,7 @@ void LLAppViewer::requestQuit()
gLogoutTimer.reset();
mQuitRequested = true;
pingMainloopTimeout("Main:LoggingOut");
}
static bool finish_quit(const LLSD& notification, const LLSD& response)
@ -6397,6 +6403,7 @@ void LLAppViewer::outOfMemorySoftQuit()
LLLFSThread::sLocal->pause();
gLogoutTimer.reset();
mQuitRequested = true;
destroyMainloopTimeout();
LLError::LLUserWarningMsg::showOutOfMemory();
}
@ -6833,6 +6840,11 @@ void LLAppViewer::pingMainloopTimeout(std::string_view state)
F32 LLAppViewer::getMainloopTimeoutSec() const
{
if (isQuitting() || mQuitRequested)
{
constexpr F32 QUITTING_SECONDS = 240.f;
return QUITTING_SECONDS;
}
if (LLStartUp::getStartupState() == STATE_STARTED
&& gAgent.getTeleportState() == LLAgent::TELEPORT_NONE)
{
@ -6851,6 +6863,11 @@ void LLAppViewer::handleLoginComplete()
{
gLoggedInTime.start();
initMainloopTimeout("Mainloop Init");
LLWindow* viewer_window = gViewerWindow->getWindow();
if (viewer_window) // in case of a headless client
{
viewer_window->initWatchdog();
}
// Store some data to DebugInfo in case of a freeze.
gDebugInfo["ClientInfo"]["Name"] = LLVersionInfo::instance().getChannel();