Henri's HTTP pipeline, with SG twist

This commit is contained in:
Siana Gearz
2010-12-30 20:27:26 +01:00
parent e31c21fc54
commit 5fd5049e9b
15 changed files with 1102 additions and 584 deletions

View File

@@ -60,6 +60,27 @@ LLWorkerThread::~LLWorkerThread()
// ~LLQueuedThread() will be called here
}
//called only in destructor.
void LLWorkerThread::clearDeleteList()
{
// Delete any workers in the delete queue (should be safe - had better be!)
if (!mDeleteList.empty())
{
llwarns << "Worker Thread: " << mName << " destroyed with " << mDeleteList.size()
<< " entries in delete list." << llendl;
mDeleteMutex->lock();
for (delete_list_t::iterator iter = mDeleteList.begin(); iter != mDeleteList.end(); ++iter)
{
(*iter)->mRequestHandle = LLWorkerThread::nullHandle();
(*iter)->clearFlags(LLWorkerClass::WCF_HAVE_WORK);
delete *iter ;
}
mDeleteList.clear() ;
mDeleteMutex->unlock() ;
}
}
// virtual
S32 LLWorkerThread::update(U32 max_time_ms)
{
@@ -181,6 +202,7 @@ void LLWorkerThread::WorkRequest::finishRequest(bool completed)
LLWorkerClass::LLWorkerClass(LLWorkerThread* workerthread, const std::string& name)
: mWorkerThread(workerthread),
mRequestPriority(LLWorkerThread::PRIORITY_NORMAL),
mWorkerClassName(name),
mRequestHandle(LLWorkerThread::nullHandle()),
mMutex(NULL),
@@ -314,7 +336,20 @@ bool LLWorkerClass::checkWork(bool aborting)
if (mRequestHandle != LLWorkerThread::nullHandle())
{
LLWorkerThread::WorkRequest* workreq = (LLWorkerThread::WorkRequest*)mWorkerThread->getRequest(mRequestHandle);
if(!workreq)
{
if(mWorkerThread->isQuitting() || mWorkerThread->isStopped()) //the mWorkerThread is not running
{
mRequestHandle = LLWorkerThread::nullHandle();
clearFlags(WCF_HAVE_WORK);
}
else
{
llassert_always(workreq);
}
return true ;
}
LLQueuedThread::status_t status = workreq->getStatus();
if (status == LLWorkerThread::STATUS_ABORTED)
{
@@ -364,7 +399,7 @@ void LLWorkerClass::scheduleDelete()
void LLWorkerClass::setPriority(U32 priority)
{
mMutex.lock();
if (mRequestHandle != LLWorkerThread::nullHandle())
if (mRequestHandle != LLWorkerThread::nullHandle() && mRequestPriority != priority)
{
mRequestPriority = priority;
mWorkerThread->setPriority(mRequestHandle, priority);