diff options
author | McCabe Maxsted | 2010-08-30 13:11:36 -0700 |
---|---|---|
committer | McCabe Maxsted | 2010-08-30 13:11:36 -0700 |
commit | 4ca4594ec264f390be981568ef5ff3ff0f2f77e6 (patch) | |
tree | 6f64ed91b5763c8aac33c58883b66eef501fd057 /linden/indra/llcommon | |
parent | Fixed #455: inventory found items vanish after a certain amount of time. Also... (diff) | |
download | meta-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.cpp | 39 | ||||
-rw-r--r-- | linden/indra/llcommon/llworkerthread.h | 8 |
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. | ||
64 | void 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 |
64 | S32 LLWorkerThread::update(U32 max_time_ms) | 85 | S32 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() | |||
364 | void LLWorkerClass::setPriority(U32 priority) | 399 | void 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 | ||
83 | protected: | ||
84 | void clearDeleteList() ; | ||
85 | |||
83 | private: | 86 | private: |
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 | |||
101 | private: | ||
102 | void deleteWorker(LLWorkerClass* workerclass); // schedule for deletion | ||
103 | |||
98 | }; | 104 | }; |
99 | 105 | ||
100 | //============================================================================ | 106 | //============================================================================ |