Fix to prevent recursive call to DoBackgroundTimer

git-svn-id: http://svn.inspircd.org/repository/trunk/inspircd@3441 e03df62e-2008-0410-955e-edbf42e46eb7
This commit is contained in:
brain 2006-03-02 23:03:13 +00:00
parent 81761626d0
commit 413f775b89

View File

@ -616,7 +616,22 @@ void InspIRCd::DoOneIteration(bool process_module_sockets)
if (((TIME % 5) == 0) && (!expire_run)) if (((TIME % 5) == 0) && (!expire_run))
{ {
expire_lines(); expire_lines();
FOREACH_MOD(I_OnBackgroundTimer,OnBackgroundTimer(TIME)); if (process_module_sockets)
{
/* Fix by brain - the addition of DoOneIteration means that this
* can end up getting called recursively in the following pattern:
*
* m_spanningtree DoPingChecks
* (server pings out and is squit)
* (squit causes call to DoOneIteration)
* DoOneIteration enters here
* calls DoBackground timer
* enters m_spanningtree DoPingChecks... see step 1.
*
* This should do the job and fix the bug.
*/
FOREACH_MOD(I_OnBackgroundTimer,OnBackgroundTimer(TIME));
}
TickMissedTimers(TIME); TickMissedTimers(TIME);
expire_run = true; expire_run = true;
return; return;
@ -633,7 +648,7 @@ void InspIRCd::DoOneIteration(bool process_module_sockets)
WriteOpers("*** \002EH?!\002 -- Time is flowing BACKWARDS in this dimension! Clock drifted backwards %d secs.",abs(OLDTIME-TIME)); WriteOpers("*** \002EH?!\002 -- Time is flowing BACKWARDS in this dimension! Clock drifted backwards %d secs.",abs(OLDTIME-TIME));
DoBackgroundUserStuff(TIME); DoBackgroundUserStuff(TIME);
} }
/* Process timeouts on module sockets each time around /* Process timeouts on module sockets each time around
* the loop. There shouldnt be many module sockets, at * the loop. There shouldnt be many module sockets, at
* most, 20 or so, so this won't be much of a performance * most, 20 or so, so this won't be much of a performance