added a case where CreateTimer() can return INVALID_HANDLE
fixed two initialization bugs in TimerSys --HG-- extra : convert_revision : svn%3A39bc706e-5318-0410-9160-8a85361fbb7c/trunk%401415
This commit is contained in:
+6
-3
@@ -158,6 +158,12 @@ ITimer *TimerSystem::CreateTimer(ITimedEvent *pCallbacks, float fInterval, void
|
||||
TimerIter iter;
|
||||
float to_exec = GetSimulatedTime() + fInterval;
|
||||
|
||||
if ((flags & TIMER_FLAG_BEFORE_MAP_END)
|
||||
&& m_fnTimeLeft == NULL)
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
|
||||
if (m_FreeTimers.empty())
|
||||
{
|
||||
pTimer = new ITimer;
|
||||
@@ -253,8 +259,6 @@ void TimerSystem::FireTimerOnce(ITimer *pTimer, bool delayExec)
|
||||
|
||||
void TimerSystem::KillTimer(ITimer *pTimer)
|
||||
{
|
||||
TimerList *pList;
|
||||
|
||||
if (pTimer->m_KillMe)
|
||||
{
|
||||
return;
|
||||
@@ -278,7 +282,6 @@ void TimerSystem::KillTimer(ITimer *pTimer)
|
||||
m_SingleTimers.remove(pTimer);
|
||||
}
|
||||
|
||||
pList->remove(pTimer);
|
||||
m_FreeTimers.push(pTimer);
|
||||
}
|
||||
|
||||
|
||||
@@ -181,6 +181,13 @@ static cell_t smn_CreateTimer(IPluginContext *pCtx, const cell_t *params)
|
||||
|
||||
pInfo = s_TimerNatives.CreateTimerInfo();
|
||||
pTimer = g_Timers.CreateTimer(&s_TimerNatives, sp_ctof(params[1]), pInfo, flags);
|
||||
|
||||
if (!pTimer)
|
||||
{
|
||||
s_TimerNatives.DeleteTimerInfo(pInfo);
|
||||
return 0;
|
||||
}
|
||||
|
||||
hndl = g_HandleSys.CreateHandle(g_TimerType, pInfo, pCtx->GetIdentity(), g_pCoreIdent, NULL);
|
||||
|
||||
pInfo->UserData = params[3];
|
||||
|
||||
Reference in New Issue
Block a user