diff options
Diffstat (limited to 'indra/newview/llappviewer.cpp')
| -rw-r--r-- | indra/newview/llappviewer.cpp | 46 | 
1 files changed, 40 insertions, 6 deletions
diff --git a/indra/newview/llappviewer.cpp b/indra/newview/llappviewer.cpp index 88f6005dce..9eb0d3fade 100644 --- a/indra/newview/llappviewer.cpp +++ b/indra/newview/llappviewer.cpp @@ -4425,6 +4425,9 @@ bool LLAppViewer::initCache()      const U32 CACHE_NUMBER_OF_REGIONS_FOR_OBJECTS = 128;      LLVOCache::getInstance()->initCache(LL_PATH_CACHE, CACHE_NUMBER_OF_REGIONS_FOR_OBJECTS, getObjectCacheVersion()); +    // Remove old, stale CEF cache folders +    purgeCefStaleCaches(); +      return true;  } @@ -4449,18 +4452,27 @@ void LLAppViewer::loadKeyBindings()      LLUrlRegistry::instance().setKeybindingHandler(&gViewerInput);  } +// As per GHI #4498, remove old, stale CEF cache folders from previous sessions +void LLAppViewer::purgeCefStaleCaches() +{ +    // TODO: we really shouldn't use a hard coded name for the cache folder here... +    const std::string browser_parent_cache = gDirUtilp->getExpandedFilename(LL_PATH_CACHE, "cef_cache"); +    if (LLFile::isdir(browser_parent_cache)) +    { +        // This is a sledgehammer approach - nukes the cef_cache dir entirely +        // which is then recreated the first time a CEF instance creates an +        // individual cache folder. If we ever decide to retain some folders +        // e.g. Search UI cache - then we will need a more granular approach. +        gDirUtilp->deleteDirAndContents(browser_parent_cache); +    } +} +  void LLAppViewer::purgeCache()  {      LL_INFOS("AppCache") << "Purging Cache and Texture Cache..." << LL_ENDL;      LLAppViewer::getTextureCache()->purgeCache(LL_PATH_CACHE);      LLVOCache::getInstance()->removeCache(LL_PATH_CACHE);      LLViewerShaderMgr::instance()->clearShaderCache(); -    std::string browser_cache = gDirUtilp->getExpandedFilename(LL_PATH_CACHE, "cef_cache"); -    if (LLFile::isdir(browser_cache)) -    { -        // cef does not support clear_cache and clear_cookies, so clear what we can manually. -        gDirUtilp->deleteDirAndContents(browser_cache); -    }      gDirUtilp->deleteFilesInDir(gDirUtilp->getExpandedFilename(LL_PATH_CACHE, ""), "*");  } @@ -4529,6 +4541,7 @@ void LLAppViewer::forceDisconnect(const std::string& mesg)      }      else      { +        sendSimpleLogoutRequest();          args["MESSAGE"] = big_reason;          LLNotificationsUtil::add("YouHaveBeenLoggedOut", args, LLSD(), &finish_disconnect );      } @@ -5309,6 +5322,27 @@ void LLAppViewer::sendLogoutRequest()      }  } +void LLAppViewer::sendSimpleLogoutRequest() +{ +    if (!mLogoutRequestSent && gMessageSystem) +    { +        gLogoutInProgress = true; + +        LLMessageSystem* msg = gMessageSystem; +        msg->newMessageFast(_PREHASH_LogoutRequest); +        msg->nextBlockFast(_PREHASH_AgentData); +        msg->addUUIDFast(_PREHASH_AgentID, gAgent.getID()); +        msg->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID()); +        gAgent.sendReliableMessage(); + +        LL_INFOS("Agent") << "Logging out as agent: " << gAgent.getID() << " Session: " << gAgent.getSessionID() << LL_ENDL; + +        gLogoutTimer.reset(); +        gLogoutMaxTime = LOGOUT_REQUEST_TIME; +        mLogoutRequestSent = true; +    } +} +  void LLAppViewer::updateNameLookupUrl(const LLViewerRegion * regionp)  {      if (!regionp || !regionp->capabilitiesReceived())  | 
