aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/linden/indra/llcommon
diff options
context:
space:
mode:
authorMcCabe Maxsted2010-08-30 13:11:36 -0700
committerMcCabe Maxsted2010-08-30 13:11:36 -0700
commit4ca4594ec264f390be981568ef5ff3ff0f2f77e6 (patch)
tree6f64ed91b5763c8aac33c58883b66eef501fd057 /linden/indra/llcommon
parentFixed #455: inventory found items vanish after a certain amount of time. Also... (diff)
downloadmeta-impy-4ca4594ec264f390be981568ef5ff3ff0f2f77e6.zip
meta-impy-4ca4594ec264f390be981568ef5ff3ff0f2f77e6.tar.gz
meta-impy-4ca4594ec264f390be981568ef5ff3ff0f2f77e6.tar.bz2
meta-impy-4ca4594ec264f390be981568ef5ff3ff0f2f77e6.tar.xz
Updated lltexturecache to the latest in viewer-development (see #425)
Diffstat (limited to 'linden/indra/llcommon')
-rw-r--r--linden/indra/llcommon/llworkerthread.cpp39
-rw-r--r--linden/indra/llcommon/llworkerthread.h8
2 files changed, 44 insertions, 3 deletions
diff --git a/linden/indra/llcommon/llworkerthread.cpp b/linden/indra/llcommon/llworkerthread.cpp
index 8195e1c..67664c7 100644
--- a/linden/indra/llcommon/llworkerthread.cpp
+++ b/linden/indra/llcommon/llworkerthread.cpp
@@ -60,6 +60,27 @@ LLWorkerThread::~LLWorkerThread()
60 // ~LLQueuedThread() will be called here 60 // ~LLQueuedThread() will be called here
61} 61}
62 62
63//called only in destructor.
64void LLWorkerThread::clearDeleteList()
65{
66 // Delete any workers in the delete queue (should be safe - had better be!)
67 if (!mDeleteList.empty())
68 {
69 llwarns << "Worker Thread: " << mName << " destroyed with " << mDeleteList.size()
70 << " entries in delete list." << llendl;
71
72 mDeleteMutex->lock();
73 for (delete_list_t::iterator iter = mDeleteList.begin(); iter != mDeleteList.end(); ++iter)
74 {
75 (*iter)->mRequestHandle = LLWorkerThread::nullHandle();
76 (*iter)->clearFlags(LLWorkerClass::WCF_HAVE_WORK);
77 delete *iter ;
78 }
79 mDeleteList.clear() ;
80 mDeleteMutex->unlock() ;
81 }
82}
83
63// virtual 84// virtual
64S32 LLWorkerThread::update(U32 max_time_ms) 85S32 LLWorkerThread::update(U32 max_time_ms)
65{ 86{
@@ -183,6 +204,7 @@ LLWorkerClass::LLWorkerClass(LLWorkerThread* workerthread, const std::string& na
183 : mWorkerThread(workerthread), 204 : mWorkerThread(workerthread),
184 mWorkerClassName(name), 205 mWorkerClassName(name),
185 mRequestHandle(LLWorkerThread::nullHandle()), 206 mRequestHandle(LLWorkerThread::nullHandle()),
207 mRequestPriority(LLWorkerThread::PRIORITY_NORMAL),
186 mMutex(NULL), 208 mMutex(NULL),
187 mWorkFlags(0) 209 mWorkFlags(0)
188{ 210{
@@ -314,7 +336,20 @@ bool LLWorkerClass::checkWork(bool aborting)
314 if (mRequestHandle != LLWorkerThread::nullHandle()) 336 if (mRequestHandle != LLWorkerThread::nullHandle())
315 { 337 {
316 LLWorkerThread::WorkRequest* workreq = (LLWorkerThread::WorkRequest*)mWorkerThread->getRequest(mRequestHandle); 338 LLWorkerThread::WorkRequest* workreq = (LLWorkerThread::WorkRequest*)mWorkerThread->getRequest(mRequestHandle);
317 llassert_always(workreq); 339 if(!workreq)
340 {
341 if(mWorkerThread->isQuitting() || mWorkerThread->isStopped()) //the mWorkerThread is not running
342 {
343 mRequestHandle = LLWorkerThread::nullHandle();
344 clearFlags(WCF_HAVE_WORK);
345 }
346 else
347 {
348 llassert_always(workreq);
349 }
350 return true ;
351 }
352
318 LLQueuedThread::status_t status = workreq->getStatus(); 353 LLQueuedThread::status_t status = workreq->getStatus();
319 if (status == LLWorkerThread::STATUS_ABORTED) 354 if (status == LLWorkerThread::STATUS_ABORTED)
320 { 355 {
@@ -364,7 +399,7 @@ void LLWorkerClass::scheduleDelete()
364void LLWorkerClass::setPriority(U32 priority) 399void LLWorkerClass::setPriority(U32 priority)
365{ 400{
366 mMutex.lock(); 401 mMutex.lock();
367 if (mRequestHandle != LLWorkerThread::nullHandle()) 402 if (mRequestHandle != LLWorkerThread::nullHandle() && mRequestPriority != priority)
368 { 403 {
369 mRequestPriority = priority; 404 mRequestPriority = priority;
370 mWorkerThread->setPriority(mRequestHandle, priority); 405 mWorkerThread->setPriority(mRequestHandle, priority);
diff --git a/linden/indra/llcommon/llworkerthread.h b/linden/indra/llcommon/llworkerthread.h
index 708d812..d1868bc 100644
--- a/linden/indra/llcommon/llworkerthread.h
+++ b/linden/indra/llcommon/llworkerthread.h
@@ -80,6 +80,9 @@ public:
80 S32 mParam; 80 S32 mParam;
81 }; 81 };
82 82
83protected:
84 void clearDeleteList() ;
85
83private: 86private:
84 typedef std::list<LLWorkerClass*> delete_list_t; 87 typedef std::list<LLWorkerClass*> delete_list_t;
85 delete_list_t mDeleteList; 88 delete_list_t mDeleteList;
@@ -93,8 +96,11 @@ public:
93 96
94 handle_t addWorkRequest(LLWorkerClass* workerclass, S32 param, U32 priority = PRIORITY_NORMAL); 97 handle_t addWorkRequest(LLWorkerClass* workerclass, S32 param, U32 priority = PRIORITY_NORMAL);
95 98
96 void deleteWorker(LLWorkerClass* workerclass); // schedule for deletion
97 S32 getNumDeletes() { return (S32)mDeleteList.size(); } // debug 99 S32 getNumDeletes() { return (S32)mDeleteList.size(); } // debug
100
101private:
102 void deleteWorker(LLWorkerClass* workerclass); // schedule for deletion
103
98}; 104};
99 105
100//============================================================================ 106//============================================================================