summaryrefslogtreecommitdiff
path: root/indra/llcommon/llapp.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'indra/llcommon/llapp.cpp')
-rw-r--r--indra/llcommon/llapp.cpp20
1 files changed, 14 insertions, 6 deletions
diff --git a/indra/llcommon/llapp.cpp b/indra/llcommon/llapp.cpp
index a90b294550..34f6ba140a 100644
--- a/indra/llcommon/llapp.cpp
+++ b/indra/llcommon/llapp.cpp
@@ -113,7 +113,8 @@ BOOL LLApp::sDisableCrashlogger = FALSE;
BOOL LLApp::sLogInSignal = FALSE;
// static
-LLApp::EAppStatus LLApp::sStatus = LLApp::APP_STATUS_STOPPED; // Keeps track of application status
+// Keeps track of application status
+LLScalarCond<LLApp::EAppStatus> LLApp::sStatus{LLApp::APP_STATUS_STOPPED};
LLAppErrorHandler LLApp::sErrorHandler = NULL;
BOOL LLApp::sErrorThreadRunning = FALSE;
@@ -579,7 +580,8 @@ static std::map<LLApp::EAppStatus, const char*> statusDesc
// static
void LLApp::setStatus(EAppStatus status)
{
- sStatus = status;
+ // notify everyone waiting on sStatus any time its value changes
+ sStatus.set_all(status);
// This can also happen very late in the application lifecycle -- don't
// resurrect a deleted LLSingleton
@@ -609,6 +611,12 @@ void LLApp::setError()
setStatus(APP_STATUS_ERROR);
}
+// static
+bool LLApp::sleep(F32Milliseconds duration)
+{
+ return ! sStatus.wait_for_unequal(duration, APP_STATUS_RUNNING);
+}
+
void LLApp::setMiniDumpDir(const std::string &path)
{
if (path.empty())
@@ -668,28 +676,28 @@ void LLApp::setStopped()
// static
bool LLApp::isStopped()
{
- return (APP_STATUS_STOPPED == sStatus);
+ return (APP_STATUS_STOPPED == sStatus.get());
}
// static
bool LLApp::isRunning()
{
- return (APP_STATUS_RUNNING == sStatus);
+ return (APP_STATUS_RUNNING == sStatus.get());
}
// static
bool LLApp::isError()
{
- return (APP_STATUS_ERROR == sStatus);
+ return (APP_STATUS_ERROR == sStatus.get());
}
// static
bool LLApp::isQuitting()
{
- return (APP_STATUS_QUITTING == sStatus);
+ return (APP_STATUS_QUITTING == sStatus.get());
}
// static