Esempio n. 1
0
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();
	}
}
Esempio n. 2
0
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 ;
}
Esempio n. 3
0
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;
}
Esempio n. 4
0
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;
}
Esempio n. 5
0
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 ;
}