// Note: call once per frame S32 LLCurlRequest::process() { S32 res = 0; mProcessing = TRUE; for (curlmulti_set_t::iterator iter = mMultiSet.begin(); iter != mMultiSet.end(); ) { curlmulti_set_t::iterator curiter = iter++; LLCurl::Multi* multi = *curiter; if(!multi->isValid()) { if(multi == mActiveMulti) { mActiveMulti = NULL ; mActiveRequestCount = 0 ; } mMultiSet.erase(curiter) ; LLCurl::getCurlThread()->killMulti(multi) ; continue ; } S32 tres = multi->process(); res += tres; if (multi != mActiveMulti && tres == 0 && multi->mQueued == 0) { mMultiSet.erase(curiter); LLCurl::getCurlThread()->killMulti(multi); } } mProcessing = FALSE; return res; }
// Note: call once per frame S32 LLCurlRequest::process() { S32 res = 0; for (curlmulti_set_t::iterator iter = mMultiSet.begin(); iter != mMultiSet.end(); ) { curlmulti_set_t::iterator curiter = iter++; LLCurl::Multi* multi = *curiter; S32 tres = multi->process(); res += tres; if (multi != mActiveMulti && tres == 0 && multi->mQueued == 0) { mMultiSet.erase(curiter); delete multi; } } return res; }
// Note: call once per frame S32 LLCurlRequest::process() { llassert_always(mThreadID == LLThread::currentID()); S32 res = 0; mProcessing = TRUE; for (curlmulti_set_t::iterator iter = mMultiSet.begin(); iter != mMultiSet.end(); ) { curlmulti_set_t::iterator curiter = iter++; LLCurl::Multi* multi = *curiter; S32 tres = multi->process(); res += tres; if (multi != mActiveMulti && tres == 0 && multi->mQueued == 0) { mMultiSet.erase(curiter); if (multi->mThreaded) multi->mSignal->lock(); multi->mQuitting = true; if (multi->mThreaded) { while (!multi->isStopped()) { multi->mSignal->signal(); multi->mSignal->unlock(); apr_sleep(1000); multi->mSignal->unlock(); } } if (multi->mThreaded) multi->mSignal->unlock(); delete multi; } } mProcessing = FALSE; return res; }