summaryrefslogtreecommitdiff
path: root/indra/llcommon
diff options
context:
space:
mode:
Diffstat (limited to 'indra/llcommon')
-rw-r--r--indra/llcommon/llcoros.cpp12
-rw-r--r--indra/llcommon/llcoros.h4
-rw-r--r--indra/llcommon/lleventcoro.cpp2
3 files changed, 14 insertions, 4 deletions
diff --git a/indra/llcommon/llcoros.cpp b/indra/llcommon/llcoros.cpp
index febe74b559..5f940de52b 100644
--- a/indra/llcommon/llcoros.cpp
+++ b/indra/llcommon/llcoros.cpp
@@ -192,7 +192,8 @@ bool LLCoros::kill(const std::string& name)
}
|*==========================================================================*/
-std::string LLCoros::getName() const
+//static
+std::string LLCoros::getName()
{
return get_CoroData("getName()").mName;
}
@@ -320,12 +321,21 @@ void LLCoros::toplevel(std::string name, callable_t callable)
}
}
+//static
void LLCoros::checkStop()
{
if (wasDeleted())
{
LLTHROW(Shutdown("LLCoros was deleted"));
}
+ // do this AFTER the check above, because getName() depends on
+ // get_CoroData(), which depends on the local_ptr in our instance().
+ if (getName().empty())
+ {
+ // Our Stop exception and its subclasses are intended to stop loitering
+ // coroutines. Don't throw it from the main coroutine.
+ return;
+ }
if (LLApp::isStopped())
{
LLTHROW(Stopped("viewer is stopped"));
diff --git a/indra/llcommon/llcoros.h b/indra/llcommon/llcoros.h
index 7b3420cc8f..2e4cd8ccad 100644
--- a/indra/llcommon/llcoros.h
+++ b/indra/llcommon/llcoros.h
@@ -140,7 +140,7 @@ public:
* (e.g. if the coroutine was launched by hand rather than using
* LLCoros::launch()).
*/
- std::string getName() const;
+ static std::string getName();
/**
* For delayed initialization. To be clear, this will only affect
@@ -295,7 +295,7 @@ inline
std::string logname()
{
static std::string main("main");
- std::string name(LLCoros::instance().getName());
+ std::string name(LLCoros::getName());
return name.empty()? main : name;
}
diff --git a/indra/llcommon/lleventcoro.cpp b/indra/llcommon/lleventcoro.cpp
index 967c4d74d8..11b6e5bb2f 100644
--- a/indra/llcommon/lleventcoro.cpp
+++ b/indra/llcommon/lleventcoro.cpp
@@ -62,7 +62,7 @@ namespace
std::string listenerNameForCoro()
{
// If this coroutine was launched by LLCoros::launch(), find that name.
- std::string name(LLCoros::instance().getName());
+ std::string name(LLCoros::getName());
if (! name.empty())
{
return name;