Merge pull request #166 from Learath2/pr_UpdateHang

Fix update hang
This commit is contained in:
Dennis Felsing 2015-03-13 20:20:43 +01:00
commit f89f077a53
5 changed files with 19 additions and 8 deletions

View file

@ -16,6 +16,7 @@ public:
PARSING_UPDATE,
DOWNLOADING,
NEED_RESTART,
FAIL_MANIFEST,
};
virtual void Update() = 0;

View file

@ -39,7 +39,10 @@ void CAutoUpdate::CompletionCallback(CFetchTask *pTask, void *pUser)
CAutoUpdate *pUpdate = (CAutoUpdate *)pUser;
if(!str_comp(pTask->Dest(), "update.json"))
{
pUpdate->m_State = GOT_MANIFEST;
if(pTask->State() == CFetchTask::STATE_DONE)
pUpdate->m_State = GOT_MANIFEST;
else if(pTask->State() == CFetchTask::STATE_ERROR)
pUpdate->m_State = FAIL_MANIFEST;
}
else if(!str_comp(pTask->Dest(), pUpdate->m_aLastFile))
{

View file

@ -91,7 +91,7 @@ void CFetcher::FetcherThread(void *pUser)
}
}
bool CFetcher::FetchFile(CFetchTask *pTask)
void CFetcher::FetchFile(CFetchTask *pTask)
{
for(int i = 0; pTask->m_pDest[i] != '\0'; i++)
{
@ -126,18 +126,20 @@ bool CFetcher::FetchFile(CFetchTask *pTask)
dbg_msg("fetcher", "Downloading %s", pTask->m_pDest);
pTask->m_State = CFetchTask::STATE_RUNNING;
int ret = curl_easy_perform(m_pHandle);
io_close(File);
if(ret != CURLE_OK)
{
dbg_msg("fetcher", "Task failed. libcurl error: %s", aErr);
pTask->m_State = (ret == CURLE_ABORTED_BY_CALLBACK) ? CFetchTask::STATE_ABORTED : CFetchTask::STATE_ERROR;
return false;
}
io_close(File);
dbg_msg("fetcher", "Task done %s", pTask->m_pDest);
pTask->m_State = CFetchTask::STATE_DONE;
else
{
dbg_msg("fetcher", "Task done %s", pTask->m_pDest);
pTask->m_State = CFetchTask::STATE_DONE;
}
if(pTask->m_pfnCompCallback)
pTask->m_pfnCompCallback(pTask, pTask->m_pUser);
return true;
}
void CFetcher::WriteToFile(char *pData, size_t size, size_t nmemb, void *pFile)

View file

@ -25,7 +25,7 @@ public:
virtual void QueueAdd(CFetchTask *pTask, const char *pUrl, const char *pDest, int StorageType = 2, void *pUser = 0, COMPFUNC pfnCompCb = 0, PROGFUNC pfnProgCb = 0);
virtual void Escape(char *pBud, size_t size, const char *pStr);
static void FetcherThread(void *pUser);
bool FetchFile(CFetchTask *pTask);
void FetchFile(CFetchTask *pTask);
static void WriteToFile(char *pData, size_t size, size_t nmemb, void *pFile);
static int ProgressCallback(void *pUser, double DlTotal, double DlCurr, double UlTotal, double UlCurr);
};

View file

@ -1292,6 +1292,11 @@ void CMenus::RenderServerbrowser(CUIRect MainView)
str_format(aBuf, sizeof(aBuf), Localize("Current version: %s"), GAME_VERSION);
else if(State >= IAutoUpdate::GETTING_MANIFEST && State < IAutoUpdate::NEED_RESTART)
str_format(aBuf, sizeof(aBuf), "Downloading %s:", AutoUpdate()->GetCurrentFile());
else if(State == IAutoUpdate::FAIL_MANIFEST)
{
str_format(aBuf, sizeof(aBuf), "Failed to download manifest!");
TextRender()->TextColor(1.0f, 0.4f, 0.4f, 1.0f);
}
else if(State == IAutoUpdate::NEED_RESTART)
{
str_format(aBuf, sizeof(aBuf), "DDNet Client updated!");