MAINT-4009: Cleaning up the curl easy handle during shutdown.

meow-7.2.2
Stinson Linden 2014-04-23 19:36:08 +01:00
parent 5969c3d04f
commit fd0e84296e
2 changed files with 39 additions and 9 deletions

View File

@ -274,6 +274,36 @@ void LLCurl::Easy::releaseEasyHandle(CURL* handle)
}
}
//static
void LLCurl::Easy::deleteAllActiveHandles()
{
LLMutexLock lock(sHandleMutexp) ;
LL_CHECK_MEMORY
for (std::set<CURL*>::iterator activeHandle = sActiveHandles.begin(); activeHandle != sActiveHandles.end(); ++activeHandle)
{
CURL* curlHandle = *activeHandle;
LLCurl::deleteEasyHandle(curlHandle);
LL_CHECK_MEMORY
}
sFreeHandles.clear();
}
//static
void LLCurl::Easy::deleteAllFreeHandles()
{
LLMutexLock lock(sHandleMutexp) ;
LL_CHECK_MEMORY
for (std::set<CURL*>::iterator freeHandle = sFreeHandles.begin(); freeHandle != sFreeHandles.end(); ++freeHandle)
{
CURL* curlHandle = *freeHandle;
LLCurl::deleteEasyHandle(curlHandle);
LL_CHECK_MEMORY
}
sFreeHandles.clear();
}
LLCurl::Easy::Easy()
: mHeaders(NULL),
mCurlEasyHandle(NULL)
@ -1745,17 +1775,14 @@ void LLCurl::cleanupClass()
#endif
LL_CHECK_MEMORY
for (std::set<CURL*>::iterator iter = Easy::sFreeHandles.begin(); iter != Easy::sFreeHandles.end(); ++iter)
{
CURL* curl = *iter;
LLCurl::deleteEasyHandle(curl);
}
Easy::deleteAllFreeHandles();
LL_CHECK_MEMORY
Easy::deleteAllActiveHandles();
LL_CHECK_MEMORY
Easy::sFreeHandles.clear();
// Free the template easy handle
curl_easy_cleanup(sCurlTemplateStandardHandle);
sCurlTemplateStandardHandle = NULL;
LL_CHECK_MEMORY
delete Easy::sHandleMutexp ;

View File

@ -269,6 +269,9 @@ private:
static std::set<CURL*> sFreeHandles;
static std::set<CURL*> sActiveHandles;
static LLMutex* sHandleMutexp ;
static void deleteAllActiveHandles();
static void deleteAllFreeHandles();
};
class LLCurl::Multi