mirror of
https://github.com/alliedmodders/sourcemod.git
synced 2025-12-07 02:18:35 +00:00
Webternet: Implemented clean extension unload shutdown
This commit is contained in:
parent
5b701aec7a
commit
94770f0772
@ -104,7 +104,7 @@ void CurlExt::SDK_OnUnload()
|
||||
g_pHandleSys->RemoveType(g_DownloadHandle, myself->GetIdentity());
|
||||
plsys->RemovePluginsListener(this);
|
||||
smutils->RemoveGameFrameHook(&OnGameFrame);
|
||||
g_SessionManager.Cleanup();
|
||||
g_SessionManager.Shutdown();
|
||||
curl_global_cleanup();
|
||||
}
|
||||
|
||||
@ -757,6 +757,48 @@ void HTTPSessionManager::RunFrame()
|
||||
pRequestsLock->Unlock();
|
||||
}
|
||||
|
||||
RemoveFinishedThreads();
|
||||
}
|
||||
|
||||
void HTTPSessionManager::Initialize()
|
||||
{
|
||||
pRequestsLock = threader->MakeMutex();
|
||||
pCallbacksLock = threader->MakeMutex();
|
||||
}
|
||||
|
||||
void HTTPSessionManager::Shutdown()
|
||||
{
|
||||
// Block until all running threads have finished
|
||||
while (!this->threads.empty())
|
||||
{
|
||||
this->RemoveFinishedThreads();
|
||||
}
|
||||
|
||||
// Destroy all remaining callback calls
|
||||
this->pCallbacksLock->Lock();
|
||||
this->callbacks.clear();
|
||||
this->pCallbacksLock->Unlock();
|
||||
|
||||
if (pRequestsLock != NULL)
|
||||
{
|
||||
pRequestsLock->DestroyThis();
|
||||
}
|
||||
|
||||
if (pCallbacksLock != NULL)
|
||||
{
|
||||
pCallbacksLock->DestroyThis();
|
||||
}
|
||||
}
|
||||
|
||||
void HTTPSessionManager::AddCallback(HTTPRequest request)
|
||||
{
|
||||
this->pCallbacksLock->Lock();
|
||||
this->callbacks.push_front(request);
|
||||
this->pCallbacksLock->Unlock();
|
||||
}
|
||||
|
||||
void HTTPSessionManager::RemoveFinishedThreads()
|
||||
{
|
||||
// Do some quick "garbage collection" on finished threads
|
||||
if (!this->threads.empty())
|
||||
{
|
||||
@ -777,32 +819,6 @@ void HTTPSessionManager::RunFrame()
|
||||
}
|
||||
}
|
||||
|
||||
void HTTPSessionManager::Initialize()
|
||||
{
|
||||
pRequestsLock = threader->MakeMutex();
|
||||
pCallbacksLock = threader->MakeMutex();
|
||||
}
|
||||
|
||||
void HTTPSessionManager::Cleanup()
|
||||
{
|
||||
if (pRequestsLock != NULL)
|
||||
{
|
||||
pRequestsLock->DestroyThis();
|
||||
}
|
||||
|
||||
if (pCallbacksLock != NULL)
|
||||
{
|
||||
pCallbacksLock->DestroyThis();
|
||||
}
|
||||
}
|
||||
|
||||
void HTTPSessionManager::AddCallback(HTTPRequest request)
|
||||
{
|
||||
this->pCallbacksLock->Lock();
|
||||
this->callbacks.push_front(request);
|
||||
this->pCallbacksLock->Unlock();
|
||||
}
|
||||
|
||||
void HTTPSessionManager::HTTPAsyncRequestHandler::RunThread(IThreadHandle *pHandle)
|
||||
{
|
||||
HandleError err;
|
||||
|
||||
@ -196,7 +196,7 @@ public:
|
||||
~HTTPSessionManager() {}
|
||||
|
||||
void Initialize();
|
||||
void Cleanup();
|
||||
void Shutdown();
|
||||
void PluginUnloaded(IPlugin *plugin);
|
||||
void RunFrame();
|
||||
void BurnSessionHandle(IPluginContext * pCtx, HTTPRequestHandleSet &handles);
|
||||
@ -231,6 +231,9 @@ private:
|
||||
cell_t result;
|
||||
};
|
||||
|
||||
void RemoveFinishedThreads();
|
||||
void AddCallback(HTTPRequest request);
|
||||
|
||||
static const unsigned int iMaxRequestsPerFrame = 20;
|
||||
IMutex *pRequestsLock;
|
||||
std::deque<HTTPRequest> requests;
|
||||
@ -257,8 +260,6 @@ private:
|
||||
}
|
||||
static void ExecuteCallback(void *data);
|
||||
};
|
||||
|
||||
void AddCallback(HTTPRequest request);
|
||||
};
|
||||
|
||||
void OnGameFrame(bool simulating);
|
||||
|
||||
Loading…
Reference in New Issue
Block a user