summaryrefslogtreecommitdiff
path: root/indra/newview
diff options
context:
space:
mode:
Diffstat (limited to 'indra/newview')
-rw-r--r--indra/newview/llappviewer.cpp4
-rw-r--r--indra/newview/llmainlooprepeater.cpp12
-rw-r--r--indra/newview/llmainlooprepeater.h2
3 files changed, 13 insertions, 5 deletions
diff --git a/indra/newview/llappviewer.cpp b/indra/newview/llappviewer.cpp
index c06f0c18e8..76d518b610 100644
--- a/indra/newview/llappviewer.cpp
+++ b/indra/newview/llappviewer.cpp
@@ -812,7 +812,7 @@ bool LLAppViewer::init()
}
// Initialize the repeater service.
- LLMainLoopRepeater::getInstance()->start();
+ LLMainLoopRepeater::instance().start();
//
// Initialize the window
@@ -1737,6 +1737,8 @@ bool LLAppViewer::cleanup()
llinfos << "File launched." << llendflush;
}
+ LLMainLoopRepeater::instance().stop();
+
ll_close_fail_log();
llinfos << "Goodbye!" << llendflush;
diff --git a/indra/newview/llmainlooprepeater.cpp b/indra/newview/llmainlooprepeater.cpp
index c2eba97641..ddc925a73b 100644
--- a/indra/newview/llmainlooprepeater.cpp
+++ b/indra/newview/llmainlooprepeater.cpp
@@ -36,7 +36,7 @@
LLMainLoopRepeater::LLMainLoopRepeater(void):
- mQueue(gAPRPoolp, 1024)
+ mQueue(0)
{
; // No op.
}
@@ -44,6 +44,9 @@ LLMainLoopRepeater::LLMainLoopRepeater(void):
void LLMainLoopRepeater::start(void)
{
+ if(mQueue != 0) return;
+
+ mQueue = new LLThreadSafeQueue<LLSD>(gAPRPoolp, 1024);
mMainLoopConnection = LLEventPumps::instance().
obtain("mainloop").listen("stupid name here", boost::bind(&LLMainLoopRepeater::onMainLoop, this, _1));
mRepeaterConnection = LLEventPumps::instance().
@@ -55,13 +58,16 @@ void LLMainLoopRepeater::stop(void)
{
mMainLoopConnection.release();
mRepeaterConnection.release();
+
+ delete mQueue;
+ mQueue = 0;
}
bool LLMainLoopRepeater::onMainLoop(LLSD const &)
{
LLSD message;
- while(mQueue.tryPopBack(message)) {
+ while(mQueue->tryPopBack(message)) {
std::string pump = message["pump"].asString();
if(pump.length() == 0 ) continue; // No pump.
LLEventPumps::instance().obtain(pump).post(message["payload"]);
@@ -73,7 +79,7 @@ bool LLMainLoopRepeater::onMainLoop(LLSD const &)
bool LLMainLoopRepeater::onMessage(LLSD const & event)
{
try {
- mQueue.pushFront(event);
+ mQueue->pushFront(event);
} catch(LLThreadSafeQueueError & e) {
llwarns << "could not repeat message (" << e.what() << ")" <<
event.asString() << LL_ENDL;
diff --git a/indra/newview/llmainlooprepeater.h b/indra/newview/llmainlooprepeater.h
index 96b83b4916..f84c0ca94c 100644
--- a/indra/newview/llmainlooprepeater.h
+++ b/indra/newview/llmainlooprepeater.h
@@ -55,7 +55,7 @@ public:
private:
LLTempBoundListener mMainLoopConnection;
LLTempBoundListener mRepeaterConnection;
- LLThreadSafeQueue<LLSD> mQueue;
+ LLThreadSafeQueue<LLSD> * mQueue;
bool onMainLoop(LLSD const &);
bool onMessage(LLSD const & event);