Merge remote-tracking branch 'aleric/master'
This commit is contained in:
@@ -352,8 +352,13 @@ void AIEngine::mainloop(void)
|
|||||||
|
|
||||||
void AIEngine::flush(void)
|
void AIEngine::flush(void)
|
||||||
{
|
{
|
||||||
DoutEntering(dc::statemachine, "AIEngine::flush [" << mName << "]");
|
|
||||||
engine_state_type_wat engine_state_w(mEngineState);
|
engine_state_type_wat engine_state_w(mEngineState);
|
||||||
|
DoutEntering(dc::statemachine, "AIEngine::flush [" << mName << "]: calling force_killed() on " << engine_state_w->list.size() << " state machines.");
|
||||||
|
for (queued_type::iterator iter = engine_state_w->list.begin(); iter != engine_state_w->list.end(); ++iter)
|
||||||
|
{
|
||||||
|
// To avoid an assertion in ~AIStateMachine.
|
||||||
|
iter->statemachine().force_killed();
|
||||||
|
}
|
||||||
engine_state_w->list.clear();
|
engine_state_w->list.clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -906,6 +911,12 @@ void AIStateMachine::callback(void)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void AIStateMachine::force_killed(void)
|
||||||
|
{
|
||||||
|
multiplex_state_type_wat state_w(mState);
|
||||||
|
state_w->base_state = bs_killed;
|
||||||
|
}
|
||||||
|
|
||||||
void AIStateMachine::kill(void)
|
void AIStateMachine::kill(void)
|
||||||
{
|
{
|
||||||
DoutEntering(dc::statemachine, "AIStateMachine::kill() [" << (void*)this << "]");
|
DoutEntering(dc::statemachine, "AIStateMachine::kill() [" << (void*)this << "]");
|
||||||
|
|||||||
@@ -300,8 +300,9 @@ class AIStateMachine : public LLThreadSafeRefCount
|
|||||||
mSleep = 0;
|
mSleep = 0;
|
||||||
return mSleep != 0;
|
return mSleep != 0;
|
||||||
}
|
}
|
||||||
|
void force_killed(void); // Called from AIEngine::flush().
|
||||||
|
|
||||||
friend class AIEngine; // Calls multiplex().
|
friend class AIEngine; // Calls multiplex() and force_killed().
|
||||||
};
|
};
|
||||||
|
|
||||||
bool AIEngine::QueueElementComp::operator()(QueueElement const& e1, QueueElement const& e2) const
|
bool AIEngine::QueueElementComp::operator()(QueueElement const& e1, QueueElement const& e2) const
|
||||||
|
|||||||
@@ -707,6 +707,13 @@ AIHTTPTimeoutPolicyBase connect_40s(AIHTTPTimeoutPolicyBase::getDebugSettingsCur
|
|||||||
connectOp40s
|
connectOp40s
|
||||||
);
|
);
|
||||||
|
|
||||||
|
// This used to be FETCHING_TIMEOUT (for HTTP textures), being a 15 second timeout from start of request till finishing receiving all data.
|
||||||
|
// That seems way to demanding however; lets use a 15 second reply delay demand instead.
|
||||||
|
Reply replyOp15s(15);
|
||||||
|
AIHTTPTimeoutPolicyBase reply_15s(AIHTTPTimeoutPolicyBase::getDebugSettingsCurlTimeout(),
|
||||||
|
replyOp15s
|
||||||
|
);
|
||||||
|
|
||||||
// End of policy definitions.
|
// End of policy definitions.
|
||||||
//=======================================================================================================
|
//=======================================================================================================
|
||||||
|
|
||||||
@@ -899,7 +906,7 @@ P2(gamingDataReceived, transfer_18s);
|
|||||||
P2(groupMemberDataResponder, transfer_300s);
|
P2(groupMemberDataResponder, transfer_300s);
|
||||||
P2(groupProposalBallotResponder, transfer_300s);
|
P2(groupProposalBallotResponder, transfer_300s);
|
||||||
P(homeLocationResponder);
|
P(homeLocationResponder);
|
||||||
P(HTTPGetResponder);
|
P2(HTTPGetResponder, reply_15s);
|
||||||
P(iamHereLogin);
|
P(iamHereLogin);
|
||||||
P(iamHere);
|
P(iamHere);
|
||||||
P(iamHereVoice);
|
P(iamHereVoice);
|
||||||
|
|||||||
@@ -972,8 +972,6 @@ void LLTextureFetchWorker::startWork(S32 param)
|
|||||||
// Called from LLWorkerThread::processRequest()
|
// Called from LLWorkerThread::processRequest()
|
||||||
bool LLTextureFetchWorker::doWork(S32 param)
|
bool LLTextureFetchWorker::doWork(S32 param)
|
||||||
{
|
{
|
||||||
static const F32 FETCHING_TIMEOUT = 15.f;//seconds
|
|
||||||
|
|
||||||
LLMutexLock lock(&mWorkMutex);
|
LLMutexLock lock(&mWorkMutex);
|
||||||
|
|
||||||
if ((mFetcher->isQuitting() || getFlags(LLWorkerClass::WCF_DELETE_REQUESTED)))
|
if ((mFetcher->isQuitting() || getFlags(LLWorkerClass::WCF_DELETE_REQUESTED)))
|
||||||
@@ -1304,8 +1302,6 @@ bool LLTextureFetchWorker::doWork(S32 param)
|
|||||||
bool res = false;
|
bool res = false;
|
||||||
if (!mUrl.empty())
|
if (!mUrl.empty())
|
||||||
{
|
{
|
||||||
mRequestedTimer.reset();
|
|
||||||
|
|
||||||
mLoaded = FALSE;
|
mLoaded = FALSE;
|
||||||
mGetStatus = 0;
|
mGetStatus = 0;
|
||||||
mGetReason.clear();
|
mGetReason.clear();
|
||||||
@@ -1334,17 +1330,17 @@ bool LLTextureFetchWorker::doWork(S32 param)
|
|||||||
mRequestedOffset--;
|
mRequestedOffset--;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Will call callbackHttpGet when curl request completes
|
// Will call callbackHttpGet when curl request completes
|
||||||
AIHTTPHeaders headers("Accept", "image/x-j2c");
|
AIHTTPHeaders headers("Accept", "image/x-j2c");
|
||||||
// Call LLHTTPClient::request directly instead of LLHTTPClient::getByteRange, because we want to pass a NULL AIEngine.
|
// Call LLHTTPClient::request directly instead of LLHTTPClient::getByteRange, because we want to pass a NULL AIEngine.
|
||||||
if (mRequestedOffset > 0 || mRequestedSize > 0)
|
if (mRequestedOffset > 0 || mRequestedSize > 0)
|
||||||
{
|
{
|
||||||
headers.addHeader("Range", llformat("bytes=%d-%d", mRequestedOffset, mRequestedOffset + mRequestedSize - 1));
|
headers.addHeader("Range", llformat("bytes=%d-%d", mRequestedOffset, mRequestedOffset + mRequestedSize - 1));
|
||||||
}
|
}
|
||||||
LLHTTPClient::request(mUrl, LLHTTPClient::HTTP_GET, NULL,
|
LLHTTPClient::request(mUrl, LLHTTPClient::HTTP_GET, NULL,
|
||||||
new HTTPGetResponder(mFetcher, mID, LLTimer::getTotalTime(), mRequestedSize, mRequestedOffset, true),
|
new HTTPGetResponder(mFetcher, mID, LLTimer::getTotalTime(), mRequestedSize, mRequestedOffset, true),
|
||||||
headers/*,*/ DEBUG_CURLIO_PARAM(false), keep_alive, no_does_authentication, allow_compressed_reply, NULL, 0, NULL);
|
headers/*,*/ DEBUG_CURLIO_PARAM(false), keep_alive, no_does_authentication, allow_compressed_reply, NULL, 0, NULL);
|
||||||
res = true;
|
res = true;
|
||||||
}
|
}
|
||||||
if (!res)
|
if (!res)
|
||||||
{
|
{
|
||||||
@@ -1533,13 +1529,6 @@ bool LLTextureFetchWorker::doWork(S32 param)
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if(FETCHING_TIMEOUT < mRequestedTimer.getElapsedTimeF32())
|
|
||||||
{
|
|
||||||
//timeout, abort.
|
|
||||||
mState = DONE;
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
setPriority(LLWorkerThread::PRIORITY_LOW | mWorkPriority);
|
setPriority(LLWorkerThread::PRIORITY_LOW | mWorkPriority);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user