diff options
Diffstat (limited to 'linden/indra/newview')
-rw-r--r-- | linden/indra/newview/llappviewer.cpp | 98 | ||||
-rw-r--r-- | linden/indra/newview/llappviewer.h | 10 | ||||
-rw-r--r-- | linden/indra/newview/llfloaterbuycurrency.cpp | 2 | ||||
-rw-r--r-- | linden/indra/newview/llfloaterregioninfo.cpp | 2 | ||||
-rw-r--r-- | linden/indra/newview/llhoverview.cpp | 4 | ||||
-rw-r--r-- | linden/indra/newview/llstartup.cpp | 4 | ||||
-rw-r--r-- | linden/indra/newview/lltexturecache.cpp | 9 | ||||
-rw-r--r-- | linden/indra/newview/llviewernetwork.cpp | 17 | ||||
-rw-r--r-- | linden/indra/newview/llwatchdog.cpp | 17 | ||||
-rw-r--r-- | linden/indra/newview/llwatchdog.h | 6 | ||||
-rw-r--r-- | linden/indra/newview/llworld.cpp | 4 |
11 files changed, 134 insertions, 39 deletions
diff --git a/linden/indra/newview/llappviewer.cpp b/linden/indra/newview/llappviewer.cpp index c6f4cdd..a461dcb 100644 --- a/linden/indra/newview/llappviewer.cpp +++ b/linden/indra/newview/llappviewer.cpp | |||
@@ -530,7 +530,8 @@ LLAppViewer::LLAppViewer() : | |||
530 | mSavedFinalSnapshot(false), | 530 | mSavedFinalSnapshot(false), |
531 | mQuitRequested(false), | 531 | mQuitRequested(false), |
532 | mLogoutRequestSent(false), | 532 | mLogoutRequestSent(false), |
533 | mYieldTime(-1) | 533 | mYieldTime(-1), |
534 | mMainloopTimeout(NULL) | ||
534 | { | 535 | { |
535 | if(NULL != sInstance) | 536 | if(NULL != sInstance) |
536 | { | 537 | { |
@@ -538,15 +539,16 @@ LLAppViewer::LLAppViewer() : | |||
538 | } | 539 | } |
539 | 540 | ||
540 | sInstance = this; | 541 | sInstance = this; |
541 | |||
542 | // Initialize the mainloop timeout. | ||
543 | mMainloopTimeout = new LLWatchdogTimeout(); | ||
544 | } | 542 | } |
545 | 543 | ||
546 | LLAppViewer::~LLAppViewer() | 544 | LLAppViewer::~LLAppViewer() |
547 | { | 545 | { |
548 | // Initialize the mainloop timeout. | 546 | if(mMainloopTimeout) |
549 | delete mMainloopTimeout; | 547 | { |
548 | // delete the mainloop timeout. | ||
549 | delete mMainloopTimeout; | ||
550 | mMainloopTimeout = NULL; | ||
551 | } | ||
550 | 552 | ||
551 | // If we got to this destructor somehow, the app didn't hang. | 553 | // If we got to this destructor somehow, the app didn't hang. |
552 | removeMarkerFile(); | 554 | removeMarkerFile(); |
@@ -830,10 +832,6 @@ bool LLAppViewer::init() | |||
830 | 832 | ||
831 | bool LLAppViewer::mainLoop() | 833 | bool LLAppViewer::mainLoop() |
832 | { | 834 | { |
833 | mMainloopTimeout = new LLWatchdogTimeout(); | ||
834 | // *FIX:Mani - Make this a setting, once new settings exist in this branch. | ||
835 | mMainloopTimeout->setTimeout(5); | ||
836 | |||
837 | //------------------------------------------- | 835 | //------------------------------------------- |
838 | // Run main loop until time to quit | 836 | // Run main loop until time to quit |
839 | //------------------------------------------- | 837 | //------------------------------------------- |
@@ -933,6 +931,8 @@ bool LLAppViewer::mainLoop() | |||
933 | 931 | ||
934 | } | 932 | } |
935 | 933 | ||
934 | pauseMainloopTimeout(); | ||
935 | |||
936 | // Sleep and run background threads | 936 | // Sleep and run background threads |
937 | { | 937 | { |
938 | LLFastTimer t2(LLFastTimer::FTM_SLEEP); | 938 | LLFastTimer t2(LLFastTimer::FTM_SLEEP); |
@@ -1015,7 +1015,9 @@ bool LLAppViewer::mainLoop() | |||
1015 | //LLVFSThread::sLocal->pause(); // Prevent the VFS thread from running while rendering. | 1015 | //LLVFSThread::sLocal->pause(); // Prevent the VFS thread from running while rendering. |
1016 | //LLLFSThread::sLocal->pause(); // Prevent the LFS thread from running while rendering. | 1016 | //LLLFSThread::sLocal->pause(); // Prevent the LFS thread from running while rendering. |
1017 | 1017 | ||
1018 | mMainloopTimeout->ping(); | 1018 | resumeMainloopTimeout(); |
1019 | |||
1020 | pingMainloopTimeout("Mainloop"); | ||
1019 | } | 1021 | } |
1020 | 1022 | ||
1021 | } | 1023 | } |
@@ -1040,7 +1042,11 @@ bool LLAppViewer::mainLoop() | |||
1040 | 1042 | ||
1041 | delete gServicePump; | 1043 | delete gServicePump; |
1042 | 1044 | ||
1043 | mMainloopTimeout->stop(); | 1045 | if(mMainloopTimeout) |
1046 | { | ||
1047 | delete mMainloopTimeout; | ||
1048 | mMainloopTimeout = NULL; | ||
1049 | } | ||
1044 | 1050 | ||
1045 | llinfos << "Exiting main_loop" << llendflush; | 1051 | llinfos << "Exiting main_loop" << llendflush; |
1046 | 1052 | ||
@@ -1503,6 +1509,13 @@ bool LLAppViewer::initConfiguration() | |||
1503 | LLWindow::getFontListSans()); | 1509 | LLWindow::getFontListSans()); |
1504 | #endif | 1510 | #endif |
1505 | 1511 | ||
1512 | //*FIX:Mani - Set default to disabling watchdog mainloop | ||
1513 | // timeout for mac and linux. There is no call stack info | ||
1514 | // on these platform to help debug. | ||
1515 | #ifndef LL_WINDOWS | ||
1516 | gSavedSettings.setBOOL("WatchdogEnabled", FALSE); | ||
1517 | #endif | ||
1518 | |||
1506 | // These are warnings that appear on the first experience of that condition. | 1519 | // These are warnings that appear on the first experience of that condition. |
1507 | // They are already set in the settings_default.xml file, but still need to be added to LLFirstUse | 1520 | // They are already set in the settings_default.xml file, but still need to be added to LLFirstUse |
1508 | // for disable/reset ability | 1521 | // for disable/reset ability |
@@ -2143,6 +2156,12 @@ void LLAppViewer::writeSystemInfo() | |||
2143 | gDebugInfo["RAMInfo"] = llformat("%u", gSysMemory.getPhysicalMemoryKB()); | 2156 | gDebugInfo["RAMInfo"] = llformat("%u", gSysMemory.getPhysicalMemoryKB()); |
2144 | gDebugInfo["OSInfo"] = getOSInfo().getOSStringSimple(); | 2157 | gDebugInfo["OSInfo"] = getOSInfo().getOSStringSimple(); |
2145 | 2158 | ||
2159 | // *FIX:Mani - move this ddown in llappviewerwin32 | ||
2160 | #ifdef LL_WINDOWS | ||
2161 | DWORD thread_id = GetCurrentThreadId(); | ||
2162 | gDebugInfo["MainloopThreadID"] = (S32)thread_id; | ||
2163 | #endif | ||
2164 | |||
2146 | // Dump some debugging info | 2165 | // Dump some debugging info |
2147 | LL_INFOS("SystemInfo") << gSecondLife | 2166 | LL_INFOS("SystemInfo") << gSecondLife |
2148 | << " version " << LL_VERSION_MAJOR << "." << LL_VERSION_MINOR << "." << LL_VERSION_PATCH | 2167 | << " version " << LL_VERSION_MAJOR << "." << LL_VERSION_MINOR << "." << LL_VERSION_PATCH |
@@ -2227,6 +2246,12 @@ void LLAppViewer::handleViewerCrash() | |||
2227 | gDebugInfo["CurrentRegion"] = gAgent.getRegion()->getName(); | 2246 | gDebugInfo["CurrentRegion"] = gAgent.getRegion()->getName(); |
2228 | } | 2247 | } |
2229 | 2248 | ||
2249 | if(LLAppViewer::instance()->mMainloopTimeout) | ||
2250 | { | ||
2251 | gDebugInfo["MainloopTimeoutState"] = LLAppViewer::instance()->mMainloopTimeout->getState(); | ||
2252 | } | ||
2253 | |||
2254 | |||
2230 | //Write out the crash status file | 2255 | //Write out the crash status file |
2231 | //Use marker file style setup, as that's the simplest, especially since | 2256 | //Use marker file style setup, as that's the simplest, especially since |
2232 | //we're already in a crash situation | 2257 | //we're already in a crash situation |
@@ -3397,6 +3422,8 @@ static F32 CheckMessagesMaxTime = CHECK_MESSAGES_DEFAULT_MAX_TIME; | |||
3397 | 3422 | ||
3398 | void LLAppViewer::idleNetwork() | 3423 | void LLAppViewer::idleNetwork() |
3399 | { | 3424 | { |
3425 | pingMainloopTimeout("idleNetwork"); | ||
3426 | |||
3400 | gObjectList.mNumNewObjects = 0; | 3427 | gObjectList.mNumNewObjects = 0; |
3401 | S32 total_decoded = 0; | 3428 | S32 total_decoded = 0; |
3402 | 3429 | ||
@@ -3582,18 +3609,49 @@ void LLAppViewer::forceErrorSoftwareException() | |||
3582 | throw; | 3609 | throw; |
3583 | } | 3610 | } |
3584 | 3611 | ||
3585 | void LLAppViewer::startMainloopTimeout(F32 secs) | 3612 | void LLAppViewer::initMainloopTimeout(const std::string& state, F32 secs) |
3586 | { | 3613 | { |
3587 | if(secs < 0.0f) | 3614 | if(!mMainloopTimeout) |
3588 | { | 3615 | { |
3589 | secs = gSavedSettings.getF32("MainloopTimeoutDefault"); | 3616 | mMainloopTimeout = new LLWatchdogTimeout(); |
3617 | resumeMainloopTimeout(state, secs); | ||
3590 | } | 3618 | } |
3591 | |||
3592 | mMainloopTimeout->setTimeout(secs); | ||
3593 | mMainloopTimeout->start(); | ||
3594 | } | 3619 | } |
3595 | 3620 | ||
3596 | void LLAppViewer::stopMainloopTimeout() | 3621 | void LLAppViewer::resumeMainloopTimeout(const std::string& state, F32 secs) |
3597 | { | 3622 | { |
3598 | mMainloopTimeout->stop(); | 3623 | if(mMainloopTimeout) |
3624 | { | ||
3625 | if(secs < 0.0f) | ||
3626 | { | ||
3627 | secs = gSavedSettings.getF32("MainloopTimeoutDefault"); | ||
3628 | } | ||
3629 | |||
3630 | mMainloopTimeout->setTimeout(secs); | ||
3631 | mMainloopTimeout->start(state); | ||
3632 | } | ||
3633 | } | ||
3634 | |||
3635 | void LLAppViewer::pauseMainloopTimeout() | ||
3636 | { | ||
3637 | if(mMainloopTimeout) | ||
3638 | { | ||
3639 | mMainloopTimeout->stop(); | ||
3640 | } | ||
3599 | } | 3641 | } |
3642 | |||
3643 | void LLAppViewer::pingMainloopTimeout(const std::string& state, F32 secs) | ||
3644 | { | ||
3645 | if(mMainloopTimeout) | ||
3646 | { | ||
3647 | if(secs < 0.0f) | ||
3648 | { | ||
3649 | secs = gSavedSettings.getF32("MainloopTimeoutDefault"); | ||
3650 | } | ||
3651 | |||
3652 | mMainloopTimeout->setTimeout(secs); | ||
3653 | mMainloopTimeout->ping(state); | ||
3654 | } | ||
3655 | } | ||
3656 | |||
3657 | |||
diff --git a/linden/indra/newview/llappviewer.h b/linden/indra/newview/llappviewer.h index 160f2c8..9f9deb6 100644 --- a/linden/indra/newview/llappviewer.h +++ b/linden/indra/newview/llappviewer.h | |||
@@ -129,10 +129,12 @@ public: | |||
129 | std::string getSettingsFileName(const std::string& file); | 129 | std::string getSettingsFileName(const std::string& file); |
130 | 130 | ||
131 | // For thread debugging. | 131 | // For thread debugging. |
132 | // llstartup needs to control this. | 132 | // llstartup needs to control init. |
133 | // llworld, send_agent_pause() also controls this. | 133 | // llworld, send_agent_pause() also controls pause/resume. |
134 | void startMainloopTimeout(F32 secs = -1.0f); | 134 | void initMainloopTimeout(const std::string& state, F32 secs = -1.0f); |
135 | void stopMainloopTimeout(); | 135 | void pauseMainloopTimeout(); |
136 | void resumeMainloopTimeout(const std::string& state = "", F32 secs = -1.0f); | ||
137 | void pingMainloopTimeout(const std::string& state, F32 secs = -1.0f); | ||
136 | 138 | ||
137 | protected: | 139 | protected: |
138 | virtual bool initWindow(); // Initialize the viewer's window. | 140 | virtual bool initWindow(); // Initialize the viewer's window. |
diff --git a/linden/indra/newview/llfloaterbuycurrency.cpp b/linden/indra/newview/llfloaterbuycurrency.cpp index 0381b8f..e957ba9 100644 --- a/linden/indra/newview/llfloaterbuycurrency.cpp +++ b/linden/indra/newview/llfloaterbuycurrency.cpp | |||
@@ -375,7 +375,7 @@ void LLFloaterBuyCurrency::buyCurrency(const std::string& name, S32 price) | |||
375 | { | 375 | { |
376 | LLStringBase<char>::format_map_t args; | 376 | LLStringBase<char>::format_map_t args; |
377 | args["[NAME]"] = name.c_str(); | 377 | args["[NAME]"] = name.c_str(); |
378 | args["[PRICE]"] = price; | 378 | args["[PRICE]"] = llformat("%d", price); |
379 | gViewerWindow->alertXml("NotEnoughCurrency", args); | 379 | gViewerWindow->alertXml("NotEnoughCurrency", args); |
380 | return; | 380 | return; |
381 | } | 381 | } |
diff --git a/linden/indra/newview/llfloaterregioninfo.cpp b/linden/indra/newview/llfloaterregioninfo.cpp index 7b3b8e2..90d8af9 100644 --- a/linden/indra/newview/llfloaterregioninfo.cpp +++ b/linden/indra/newview/llfloaterregioninfo.cpp | |||
@@ -1147,7 +1147,7 @@ BOOL LLPanelRegionTextureInfo::validateTextureSizes() | |||
1147 | { | 1147 | { |
1148 | 1148 | ||
1149 | LLString::format_map_t args; | 1149 | LLString::format_map_t args; |
1150 | args["[TEXTURE_NUM]"] = i+1; | 1150 | args["[TEXTURE_NUM]"] = llformat("%d",i+1); |
1151 | args["[TEXTURE_SIZE_X]"] = llformat("%d",width); | 1151 | args["[TEXTURE_SIZE_X]"] = llformat("%d",width); |
1152 | args["[TEXTURE_SIZE_Y]"] = llformat("%d",height); | 1152 | args["[TEXTURE_SIZE_Y]"] = llformat("%d",height); |
1153 | gViewerWindow->alertXml("InvalidTerrainSize", args); | 1153 | gViewerWindow->alertXml("InvalidTerrainSize", args); |
diff --git a/linden/indra/newview/llhoverview.cpp b/linden/indra/newview/llhoverview.cpp index 082f413..c19b361 100644 --- a/linden/indra/newview/llhoverview.cpp +++ b/linden/indra/newview/llhoverview.cpp | |||
@@ -414,7 +414,7 @@ void LLHoverView::updateText() | |||
414 | else if (for_sale) | 414 | else if (for_sale) |
415 | { | 415 | { |
416 | LLString::format_map_t args; | 416 | LLString::format_map_t args; |
417 | args["[AMOUNT]"] = nodep->mSaleInfo.getSalePrice(); | 417 | args["[AMOUNT]"] = llformat("%d", nodep->mSaleInfo.getSalePrice()); |
418 | line.append(LLTrans::getString("TooltipForSaleL$", args)); | 418 | line.append(LLTrans::getString("TooltipForSaleL$", args)); |
419 | suppressObjectHoverDisplay = FALSE; // Show tip | 419 | suppressObjectHoverDisplay = FALSE; // Show tip |
420 | } | 420 | } |
@@ -589,7 +589,7 @@ void LLHoverView::updateText() | |||
589 | if (hover_parcel && hover_parcel->getParcelFlag(PF_FOR_SALE)) | 589 | if (hover_parcel && hover_parcel->getParcelFlag(PF_FOR_SALE)) |
590 | { | 590 | { |
591 | LLString::format_map_t args; | 591 | LLString::format_map_t args; |
592 | args["[AMOUNT]"] = hover_parcel->getSalePrice(); | 592 | args["[AMOUNT]"] = llformat("%d", hover_parcel->getSalePrice()); |
593 | line = LLTrans::getString("TooltipForSaleL$", args); | 593 | line = LLTrans::getString("TooltipForSaleL$", args); |
594 | mText.push_back(line); | 594 | mText.push_back(line); |
595 | } | 595 | } |
diff --git a/linden/indra/newview/llstartup.cpp b/linden/indra/newview/llstartup.cpp index 52f4d1a..4dca600 100644 --- a/linden/indra/newview/llstartup.cpp +++ b/linden/indra/newview/llstartup.cpp | |||
@@ -1224,7 +1224,7 @@ BOOL idle_startup() | |||
1224 | sAuthUriNum++; | 1224 | sAuthUriNum++; |
1225 | std::ostringstream s; | 1225 | std::ostringstream s; |
1226 | LLString::format_map_t args; | 1226 | LLString::format_map_t args; |
1227 | args["[NUMBER]"] = sAuthUriNum + 1; | 1227 | args["[NUMBER]"] = llformat("%d", sAuthUriNum + 1); |
1228 | auth_desc = LLTrans::getString("LoginAttempt", args).c_str(); | 1228 | auth_desc = LLTrans::getString("LoginAttempt", args).c_str(); |
1229 | LLStartUp::setStartupState( STATE_LOGIN_AUTHENTICATE ); | 1229 | LLStartUp::setStartupState( STATE_LOGIN_AUTHENTICATE ); |
1230 | return do_normal_idle; | 1230 | return do_normal_idle; |
@@ -2329,7 +2329,7 @@ BOOL idle_startup() | |||
2329 | gDebugView->mFastTimerView->setVisible(TRUE); | 2329 | gDebugView->mFastTimerView->setVisible(TRUE); |
2330 | #endif | 2330 | #endif |
2331 | 2331 | ||
2332 | LLAppViewer::instance()->startMainloopTimeout(); | 2332 | LLAppViewer::instance()->initMainloopTimeout("Mainloop Init"); |
2333 | 2333 | ||
2334 | return do_normal_idle; | 2334 | return do_normal_idle; |
2335 | } | 2335 | } |
diff --git a/linden/indra/newview/lltexturecache.cpp b/linden/indra/newview/lltexturecache.cpp index ab85b32..8240f77 100644 --- a/linden/indra/newview/lltexturecache.cpp +++ b/linden/indra/newview/lltexturecache.cpp | |||
@@ -39,6 +39,9 @@ | |||
39 | #include "lllfsthread.h" | 39 | #include "lllfsthread.h" |
40 | #include "llviewercontrol.h" | 40 | #include "llviewercontrol.h" |
41 | 41 | ||
42 | // Included to allow LLTextureCache::purgeTextures() to pause watchdog timeout | ||
43 | #include "llappviewer.h" | ||
44 | |||
42 | #define USE_LFS_READ 0 | 45 | #define USE_LFS_READ 0 |
43 | #define USE_LFS_WRITE 0 | 46 | #define USE_LFS_WRITE 0 |
44 | 47 | ||
@@ -1155,6 +1158,9 @@ void LLTextureCache::purgeTextures(bool validate) | |||
1155 | return; | 1158 | return; |
1156 | } | 1159 | } |
1157 | 1160 | ||
1161 | // *FIX:Mani - watchdog off. | ||
1162 | LLAppViewer::instance()->pauseMainloopTimeout(); | ||
1163 | |||
1158 | LLMutexLock lock(&mHeaderMutex); | 1164 | LLMutexLock lock(&mHeaderMutex); |
1159 | 1165 | ||
1160 | S32 filesize = ll_apr_file_size(mTexturesDirEntriesFileName, NULL); | 1166 | S32 filesize = ll_apr_file_size(mTexturesDirEntriesFileName, NULL); |
@@ -1275,6 +1281,9 @@ void LLTextureCache::purgeTextures(bool validate) | |||
1275 | llassert(mTexturesSizeTotal == total_size); | 1281 | llassert(mTexturesSizeTotal == total_size); |
1276 | 1282 | ||
1277 | delete[] entries; | 1283 | delete[] entries; |
1284 | |||
1285 | // *FIX:Mani - watchdog back on. | ||
1286 | LLAppViewer::instance()->resumeMainloopTimeout(); | ||
1278 | 1287 | ||
1279 | LL_INFOS("TextureCache") << "TEXTURE CACHE:" | 1288 | LL_INFOS("TextureCache") << "TEXTURE CACHE:" |
1280 | << " PURGED: " << purge_count | 1289 | << " PURGED: " << purge_count |
diff --git a/linden/indra/newview/llviewernetwork.cpp b/linden/indra/newview/llviewernetwork.cpp index 3224c00..c1de774 100644 --- a/linden/indra/newview/llviewernetwork.cpp +++ b/linden/indra/newview/llviewernetwork.cpp | |||
@@ -277,7 +277,22 @@ void LLViewerLogin::getLoginURIs(std::vector<std::string>& uris) const | |||
277 | 277 | ||
278 | std::string LLViewerLogin::getHelperURI() const | 278 | std::string LLViewerLogin::getHelperURI() const |
279 | { | 279 | { |
280 | return gSavedSettings.getString("CmdLineHelperURI"); | 280 | std::string helper_uri = gSavedSettings.getString("CmdLineHelperURI"); |
281 | if (helper_uri.empty()) | ||
282 | { | ||
283 | // grab URI from selected grid | ||
284 | if(mGridChoice > GRID_INFO_NONE && mGridChoice < GRID_INFO_OTHER) | ||
285 | { | ||
286 | helper_uri = gGridInfo[mGridChoice].mHelperURI; | ||
287 | } | ||
288 | |||
289 | if (helper_uri.empty()) | ||
290 | { | ||
291 | // what do we do with unnamed/miscellaneous grids? | ||
292 | // for now, operations that rely on the helper URI (currency/land purchasing) will fail | ||
293 | } | ||
294 | } | ||
295 | return helper_uri; | ||
281 | } | 296 | } |
282 | 297 | ||
283 | bool LLViewerLogin::isInProductionGrid() | 298 | bool LLViewerLogin::isInProductionGrid() |
diff --git a/linden/indra/newview/llwatchdog.cpp b/linden/indra/newview/llwatchdog.cpp index 1dd984e..d92d381 100644 --- a/linden/indra/newview/llwatchdog.cpp +++ b/linden/indra/newview/llwatchdog.cpp | |||
@@ -74,6 +74,7 @@ LLWatchdogEntry::LLWatchdogEntry() | |||
74 | 74 | ||
75 | LLWatchdogEntry::~LLWatchdogEntry() | 75 | LLWatchdogEntry::~LLWatchdogEntry() |
76 | { | 76 | { |
77 | stop(); | ||
77 | } | 78 | } |
78 | 79 | ||
79 | void LLWatchdogEntry::start() | 80 | void LLWatchdogEntry::start() |
@@ -87,8 +88,11 @@ void LLWatchdogEntry::stop() | |||
87 | } | 88 | } |
88 | 89 | ||
89 | // LLWatchdogTimeout | 90 | // LLWatchdogTimeout |
91 | const std::string UNINIT_STRING = "uninitialized"; | ||
92 | |||
90 | LLWatchdogTimeout::LLWatchdogTimeout() : | 93 | LLWatchdogTimeout::LLWatchdogTimeout() : |
91 | mTimeout(0.0f) | 94 | mTimeout(0.0f), |
95 | mPingState(UNINIT_STRING) | ||
92 | { | 96 | { |
93 | } | 97 | } |
94 | 98 | ||
@@ -106,23 +110,28 @@ void LLWatchdogTimeout::setTimeout(F32 d) | |||
106 | mTimeout = d; | 110 | mTimeout = d; |
107 | } | 111 | } |
108 | 112 | ||
109 | void LLWatchdogTimeout::start() | 113 | void LLWatchdogTimeout::start(const std::string& state) |
110 | { | 114 | { |
111 | // Order of operation is very impmortant here. | 115 | // Order of operation is very impmortant here. |
112 | // After LLWatchdogEntry::start() is called | 116 | // After LLWatchdogEntry::start() is called |
113 | // LLWatchdogTimeout::isAlive() will be called asynchronously. | 117 | // LLWatchdogTimeout::isAlive() will be called asynchronously. |
114 | mTimer.start(); | 118 | mTimer.start(); |
115 | mTimer.setTimerExpirySec(mTimeout); | 119 | ping(state); |
116 | LLWatchdogEntry::start(); | 120 | LLWatchdogEntry::start(); |
117 | } | 121 | } |
122 | |||
118 | void LLWatchdogTimeout::stop() | 123 | void LLWatchdogTimeout::stop() |
119 | { | 124 | { |
120 | LLWatchdogEntry::stop(); | 125 | LLWatchdogEntry::stop(); |
121 | mTimer.stop(); | 126 | mTimer.stop(); |
122 | } | 127 | } |
123 | 128 | ||
124 | void LLWatchdogTimeout::ping() | 129 | void LLWatchdogTimeout::ping(const std::string& state) |
125 | { | 130 | { |
131 | if(!state.empty()) | ||
132 | { | ||
133 | mPingState = state; | ||
134 | } | ||
126 | mTimer.setTimerExpirySec(mTimeout); | 135 | mTimer.setTimerExpirySec(mTimeout); |
127 | } | 136 | } |
128 | 137 | ||
diff --git a/linden/indra/newview/llwatchdog.h b/linden/indra/newview/llwatchdog.h index 96388bb..c1f2b94 100644 --- a/linden/indra/newview/llwatchdog.h +++ b/linden/indra/newview/llwatchdog.h | |||
@@ -59,15 +59,17 @@ public: | |||
59 | virtual ~LLWatchdogTimeout(); | 59 | virtual ~LLWatchdogTimeout(); |
60 | 60 | ||
61 | /* virtual */ bool isAlive() const; | 61 | /* virtual */ bool isAlive() const; |
62 | /* virtual */ void start(); | 62 | /* virtual */ void start(const std::string& state); |
63 | /* virtual */ void stop(); | 63 | /* virtual */ void stop(); |
64 | 64 | ||
65 | void setTimeout(F32 d); | 65 | void setTimeout(F32 d); |
66 | void ping(); | 66 | void ping(const std::string& state); |
67 | const std::string& getState() {return mPingState; } | ||
67 | 68 | ||
68 | private: | 69 | private: |
69 | LLTimer mTimer; | 70 | LLTimer mTimer; |
70 | F32 mTimeout; | 71 | F32 mTimeout; |
72 | std::string mPingState; | ||
71 | }; | 73 | }; |
72 | 74 | ||
73 | class LLWatchdogTimerThread; // Defined in the cpp | 75 | class LLWatchdogTimerThread; // Defined in the cpp |
diff --git a/linden/indra/newview/llworld.cpp b/linden/indra/newview/llworld.cpp index 27d7513..2c2440c 100644 --- a/linden/indra/newview/llworld.cpp +++ b/linden/indra/newview/llworld.cpp | |||
@@ -1117,7 +1117,7 @@ void send_agent_pause() | |||
1117 | { | 1117 | { |
1118 | // *NOTE:Mani Pausing the mainloop timeout. Otherwise a long modal event may cause | 1118 | // *NOTE:Mani Pausing the mainloop timeout. Otherwise a long modal event may cause |
1119 | // the thread monitor to timeout. | 1119 | // the thread monitor to timeout. |
1120 | LLAppViewer::instance()->stopMainloopTimeout(); | 1120 | LLAppViewer::instance()->pauseMainloopTimeout(); |
1121 | 1121 | ||
1122 | // Note: used to check for LLWorld initialization before it became a singleton. | 1122 | // Note: used to check for LLWorld initialization before it became a singleton. |
1123 | // Rather than just remove this check I'm changing it to assure that the message | 1123 | // Rather than just remove this check I'm changing it to assure that the message |
@@ -1175,7 +1175,7 @@ void send_agent_resume() | |||
1175 | // Reset the FPS counter to avoid an invalid fps | 1175 | // Reset the FPS counter to avoid an invalid fps |
1176 | LLViewerStats::getInstance()->mFPSStat.start(); | 1176 | LLViewerStats::getInstance()->mFPSStat.start(); |
1177 | 1177 | ||
1178 | LLAppViewer::instance()->startMainloopTimeout(); | 1178 | LLAppViewer::instance()->resumeMainloopTimeout(); |
1179 | } | 1179 | } |
1180 | 1180 | ||
1181 | 1181 | ||