LLCurl::Multi::~Multi() { llassert(isStopped()); if (LLCurl::sMultiThreaded) { LLCurl::Easy::sMultiMutex->lock(); } delete mSignal; mSignal = NULL; // Clean up active for(easy_active_list_t::iterator iter = mEasyActiveList.begin(); iter != mEasyActiveList.end(); ++iter) { Easy* easy = *iter; check_curl_multi_code(curl_multi_remove_handle(mCurlMultiHandle, easy->getCurlHandle())); delete easy; } mEasyActiveList.clear(); mEasyActiveMap.clear(); // Clean up freed for_each(mEasyFreeList.begin(), mEasyFreeList.end(), DeletePointer()); mEasyFreeList.clear(); check_curl_multi_code(curl_multi_cleanup(mCurlMultiHandle)); --gCurlMultiCount; if (LLCurl::sMultiThreaded) { LLCurl::Easy::sMultiMutex->unlock(); } }
S32 LLCurl::Multi::process() { if(!isValid()) { return 0 ; } waitToComplete() ; if (getState() != STATE_COMPLETED) { return 0; } CURLMsg* msg; int msgs_in_queue; S32 processed = 0; while ((msg = info_read(&msgs_in_queue))) { ++processed; if (msg->msg == CURLMSG_DONE) { U32 response = 0; Easy* easy = NULL ; { LLMutexLock lock(mEasyMutexp) ; easy_active_map_t::iterator iter = mEasyActiveMap.find(msg->easy_handle); if (iter != mEasyActiveMap.end()) { easy = iter->second; } } if(easy) { response = easy->report(msg->data.result); removeEasy(easy); } else { response = 499; //*TODO: change to llwarns llerrs << "cleaned up curl request completed!" << llendl; } if (response >= 400) { // failure of some sort, inc mErrorCount for debugging and flagging multi for destruction ++mErrorCount; } } } setState(STATE_READY); return processed; }
step SearchEngine::nextStep(int board[gridNum][gridNum], int state) { step temp; if (id == 0) { Easy a; temp = a.nextStep(board,state); } return temp; }
void historical(const string& ticker, const gr::date& from, const gr::date& to, forward_list<pair<string,quote_>>& quotes) { ostringstream sout; sout<< "http://ichart.yahoo.com/table.csv?" << "s=" << ticker << "&a=" << int(from.month()) - 1 << "&b=" << from.day() << "&c=" << from.year() << "&d=" << int(to.month()) - 1 << "&e=" << to.day() << "&f=" << to.year() << "&g=d&ignore=.csv"; Easy result; result.setOpt(Options::Url(sout.str())); ostringstream oss; oss<< result; istringstream iss(oss.str()); parseQuotes(iss, quotes); }
void LLCurl::Multi::cleanup(bool deleted) { if(!mCurlMultiHandle) { return ; //nothing to clean. } llassert_always(deleted || !mValid) ; LLMutexLock lock(mDeletionMutexp); // Clean up active for(easy_active_list_t::iterator iter = mEasyActiveList.begin(); iter != mEasyActiveList.end(); ++iter) { Easy* easy = *iter; check_curl_multi_code(curl_multi_remove_handle(mCurlMultiHandle, easy->getCurlHandle())); if(deleted) { easy->mResponder = NULL ; //avoid triggering mResponder. } delete easy; } mEasyActiveList.clear(); mEasyActiveMap.clear(); // Clean up freed for_each(mEasyFreeList.begin(), mEasyFreeList.end(), DeletePointer()); mEasyFreeList.clear(); check_curl_multi_code(LLCurl::deleteMultiHandle(mCurlMultiHandle)); mCurlMultiHandle = NULL ; delete mMutexp ; mMutexp = NULL ; delete mEasyMutexp ; mEasyMutexp = NULL ; mQueued = 0 ; mState = STATE_COMPLETED; --gCurlMultiCount; return ; }
LLCurl::Easy* LLCurl::Multi::allocEasy() { Easy* easy = 0; if (mEasyFreeList.empty()) { easy = Easy::getEasy(); } else { easy = *(mEasyFreeList.begin()); mEasyFreeList.erase(easy); } if (easy) { mEasyActiveList.insert(easy); mEasyActiveMap[easy->getCurlHandle()] = easy; } return easy; }
LLCurl::Multi::~Multi() { // Clean up active for(easy_active_list_t::iterator iter = mEasyActiveList.begin(); iter != mEasyActiveList.end(); ++iter) { Easy* easy = *iter; curl_multi_remove_handle(mCurlMultiHandle, easy->getCurlHandle()); delete easy; } mEasyActiveList.clear(); mEasyActiveMap.clear(); // Clean up freed for_each(mEasyFreeList.begin(), mEasyFreeList.end(), DeletePointer()); mEasyFreeList.clear(); curl_multi_cleanup(mCurlMultiHandle); --gCurlMultiCount; }
void LLCurl::Multi::cleanup() { if(!mCurlMultiHandle) { return ; //nothing to clean. } // Clean up active for(easy_active_list_t::iterator iter = mEasyActiveList.begin(); iter != mEasyActiveList.end(); ++iter) { Easy* easy = *iter; check_curl_multi_code(curl_multi_remove_handle(mCurlMultiHandle, easy->getCurlHandle())); delete easy; } mEasyActiveList.clear(); mEasyActiveMap.clear(); // Clean up freed for_each(mEasyFreeList.begin(), mEasyFreeList.end(), DeletePointer()); mEasyFreeList.clear(); check_curl_multi_code(LLCurl::deleteMultiHandle(mCurlMultiHandle)); mCurlMultiHandle = NULL ; delete mMutexp ; mMutexp = NULL ; delete mDeletionMutexp ; mDeletionMutexp = NULL ; delete mEasyMutexp ; mEasyMutexp = NULL ; mQueued = 0 ; mState = STATE_COMPLETED; --gCurlMultiCount; return ; }
S32 LLCurl::Multi::process() { perform(); CURLMsg* msg; int msgs_in_queue; S32 processed = 0; while ((msg = info_read(&msgs_in_queue))) { ++processed; if (msg->msg == CURLMSG_DONE) { U32 response = 0; easy_active_map_t::iterator iter = mEasyActiveMap.find(msg->easy_handle); if (iter != mEasyActiveMap.end()) { Easy* easy = iter->second; response = easy->report(msg->data.result); removeEasy(easy); } else { response = 499; //*TODO: change to llwarns llerrs << "cleaned up curl request completed!" << llendl; } if (response >= 400) { // failure of some sort, inc mErrorCount for debugging and flagging multi for destruction ++mErrorCount; } } } return processed; }