diff options
Diffstat (limited to 'indra')
| -rw-r--r-- | indra/llcommon/workqueue.cpp | 4 | ||||
| -rw-r--r-- | indra/llui/llcommandmanager.cpp | 2 | ||||
| -rw-r--r-- | indra/llui/llnotifications.cpp | 18 | ||||
| -rw-r--r-- | indra/llui/llnotifications.h | 2 | ||||
| -rw-r--r-- | indra/newview/llappviewer.cpp | 27 | ||||
| -rw-r--r-- | indra/newview/llviewerwindow.cpp | 2 | 
6 files changed, 43 insertions, 12 deletions
| diff --git a/indra/llcommon/workqueue.cpp b/indra/llcommon/workqueue.cpp index dace95aaf2..c8ece616b2 100644 --- a/indra/llcommon/workqueue.cpp +++ b/indra/llcommon/workqueue.cpp @@ -183,12 +183,12 @@ void LL::WorkQueueBase::callWork(const Work& work)      catch (...)      {          // Stash any other kind of uncaught exception to be rethrown by main thread. -        LL_WARNS("LLCoros") << "Capturing uncaught exception in WorkQueueBase " +        LL_WARNS("LLCoros") << "Capturing and rethrowing uncaught exception in WorkQueueBase "              << getKey() << LL_ENDL;          LL::WorkQueue::ptr_t main_queue = LL::WorkQueue::getInstance("mainloop");          main_queue->post( -            // Bind the current exception rethrow it in main loop. +            // Bind the current exception, rethrow it in main loop.              [exc = std::current_exception()]() { std::rethrow_exception(exc); });      }  #endif // else LL_WINDOWS diff --git a/indra/llui/llcommandmanager.cpp b/indra/llui/llcommandmanager.cpp index 03717da80b..b10ec51f18 100644 --- a/indra/llui/llcommandmanager.cpp +++ b/indra/llui/llcommandmanager.cpp @@ -170,12 +170,14 @@ bool LLCommandManager::load()      if (!parser.readXUI(commands_file, commandsParams))      { +        LLError::LLUserWarningMsg::showMissingFiles();          LL_ERRS() << "Unable to load xml file: " << commands_file << LL_ENDL;          return false;      }      if (!commandsParams.validateBlock())      { +        LLError::LLUserWarningMsg::showMissingFiles();          LL_ERRS() << "Invalid commands file: " << commands_file << LL_ENDL;          return false;      } diff --git a/indra/llui/llnotifications.cpp b/indra/llui/llnotifications.cpp index 634d8f71a2..a05feab1d9 100644 --- a/indra/llui/llnotifications.cpp +++ b/indra/llui/llnotifications.cpp @@ -1256,10 +1256,26 @@ LLNotifications::LLNotifications()      LLInstanceTracker<LLNotificationChannel, std::string>::instanceCount();  } + +LLNotifications::~LLNotifications() +{ +    // Clear explicitly, something in ~LLNotifications() crashes so narrowing down suspects +    pHistoryChannel = nullptr; +    pExpirationChannel = nullptr; +    mGlobalStrings.clear(); +    mTemplates.clear(); +    mVisibilityRules.clear(); +    mUniqueNotifications.clear(); +    mListener = nullptr; +} +  void LLNotifications::clear()  {      mDefaultChannels.clear(); -    mTemplates.clear(); +    // At this point mTemplates still gets used by lingering notifications +    // to do responses (ex: group notice will call forceResponse()), but +    // since network should be down and everything save, it's questionable +    // whether it should stay that way  }  // The expiration channel gets all notifications that are cancelled diff --git a/indra/llui/llnotifications.h b/indra/llui/llnotifications.h index 46286457cf..138f1969d5 100644 --- a/indra/llui/llnotifications.h +++ b/indra/llui/llnotifications.h @@ -887,7 +887,7 @@ class LLNotifications :  {      LLSINGLETON(LLNotifications);      LOG_CLASS(LLNotifications); -    virtual ~LLNotifications() {} +    virtual ~LLNotifications();  public: diff --git a/indra/newview/llappviewer.cpp b/indra/newview/llappviewer.cpp index 0ffe675a7b..7653b5ee8e 100644 --- a/indra/newview/llappviewer.cpp +++ b/indra/newview/llappviewer.cpp @@ -5216,15 +5216,28 @@ void LLAppViewer::sendLogoutRequest()          gLogoutInProgress = true;          if (!mSecondInstance)          { -            mLogoutMarkerFileName = gDirUtilp->getExpandedFilename(LL_PATH_LOGS,LOGOUT_MARKER_FILE_NAME); - -            mLogoutMarkerFile.open(mLogoutMarkerFileName, LL_APR_WB); -            if (mLogoutMarkerFile.getFileHandle()) +            mLogoutMarkerFileName = gDirUtilp->getExpandedFilename(LL_PATH_LOGS, LOGOUT_MARKER_FILE_NAME); +            try              { -                LL_INFOS("MarkerFile") << "Created logout marker file '"<< mLogoutMarkerFileName << "' " << LL_ENDL; -                recordMarkerVersion(mLogoutMarkerFile); +                if (!mLogoutMarkerFile.getFileHandle()) +                { +                    mLogoutMarkerFile.open(mLogoutMarkerFileName, LL_APR_WB); +                    if (mLogoutMarkerFile.getFileHandle()) +                    { +                        LL_INFOS("MarkerFile") << "Created logout marker file '" << mLogoutMarkerFileName << "' " << LL_ENDL; +                        recordMarkerVersion(mLogoutMarkerFile); +                    } +                    else +                    { +                        LL_WARNS("MarkerFile") << "Cannot create logout marker file " << mLogoutMarkerFileName << LL_ENDL; +                    } +                } +                else +                { +                    LL_WARNS("MarkerFile") << "Atempted to reopen file '" << mLogoutMarkerFileName << "' " << LL_ENDL; +                }              } -            else +            catch (...)              {                  LL_WARNS("MarkerFile") << "Cannot create logout marker file " << mLogoutMarkerFileName << LL_ENDL;              } diff --git a/indra/newview/llviewerwindow.cpp b/indra/newview/llviewerwindow.cpp index fe5a0667a5..93ff175967 100644 --- a/indra/newview/llviewerwindow.cpp +++ b/indra/newview/llviewerwindow.cpp @@ -1457,7 +1457,7 @@ void LLViewerWindow::handleMouseLeave(LLWindow *window)  bool LLViewerWindow::handleCloseRequest(LLWindow *window)  { -    if (!LLApp::isExiting()) +    if (!LLApp::isExiting() && !LLApp::isStopped())      {          // User has indicated they want to close, but we may need to ask          // about modified documents. | 
